android 为什么$_POST超全局不包含来自http请求实体的数据?

i2loujxw  于 2023-03-11  发布在  Android
关注(0)|答案(1)|浏览(115)

我正在将项目的网络代码从使用HttpUrlConnection和GET请求转换为使用Apache HttpClient和POST请求。

val client = HttpClients.createDefault()
val postReq = HttpPost("http://VALID_DOMAIN/app/posttest.php")
postReq.entity = HttpEntities.create("tst=1234")
val response = client.execute(postReq) { return@execute EntityUtils.toString(it.entity) }

服务器上的文件posttest.php:

<?php
$get = $_GET['tst'];
$post = $_POST['tst'];
$request = $_REQUEST['tst'];

echo "This Server Says \n_GET: $get \n_POST: $post \n_REQUEST: $request";

?>

但是,在冒号后面打印了注解,其中应该是参数'tst'的输出。我已经检查了服务器错误日志,并确保所有内容都正确编译,无法识别问题。

umuewwlo

umuewwlo1#

PHP只会在HTTP POST的Content-Typeapplication/x-www-form-urlencodedmultipart/form-data的情况下尝试填充$_POST超全局。
我不是一个Kotlin开发人员,但在我看来,您需要要么显式设置Content-Type,要么像这样使用UrlEncodedFormEntity(这可能会为您设置Content-Type头文件):

val urlParameters: MutableList<NameValuePair> = ArrayList()
urlParameters.add(BasicNameValuePair("tst", "123"))
postReq.entity = UrlEncodedFormEntity(urlParameters)

在任何一种情况下,您都可以在PHP中的$_SERVER超全局文件中看到完整的HTTP请求头(只有var_dump($_SERVER)),它们的前缀是HTTP_,因此您将在$_SERVER['HTTP_CONTENT_TYPE']中看到Content-Type-header。

  • https://www.php.net/manual/en/reserved.variables.post.php#refsect1-reserved.variables.post-description

相关问题