【发布时间】:2014-11-25 05:30:16
【问题描述】:
我一直在尝试从我的 Android 应用程序向 URL 发送 POST 请求,但我得到的只是一个空的 $_POST。这是我的代码,它在 Asynctask 中运行。我在 StackOverflow 中查看了几个类似的问题,但没有一个可以帮助我。
HttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost("http://www.somesite.com/clients/app-controller/posts.php");
try {
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
pairs.add(new BasicNameValuePair("id", "12345"));
pairs.add(new BasicNameValuePair("name", "John"));
pairs.add(new BasicNameValuePair("post", "test123"));
post.setEntity(new UrlEncodedFormEntity(pairs, HTTP.UTF_8));
post.setHeader("Content-Type", "application/x-www-form-urlencoded");
HttpResponse response = httpClient.execute(post);
String text = EntityUtils.toString(response.getEntity());
System.out.println("STATUS CODE " + response.getStatusLine().getStatusCode());
System.out.println("RETURN " + text);
} catch (ClientProtocolException e) {
System.out.println("ERROR1: " + e.getStackTrace());
} catch (IOException e) {
System.out.println("ERROR2: " + e.getStackTrace());
}
在服务器端,我有一个 PHP 测试脚本测试 $_POST 变量是否正常。
<?php echo "ISSET = " . isset($_POST["id"]) . isset($_POST["name"]) . isset($_POST["post"]); ?>
我得到的只是一个未设置的 $_POST
STATUS CODE 200
RETURN ISSET =
我没有收到任何错误警告,应用程序也没有崩溃。
我尝试将变量作为 GET 请求附加到 URL 并更改我的 PHP 文件以处理 $_GET 请求:
HttpPost post = new HttpPost("http://www.somesite.com/clients/app-controller/posts.php?id=1234&name=John&post=test123");
效果很好。我可以读取 PHP 脚本中的所有 $_GET 变量。但我需要它是一个 POST 请求。
我的 AndroidManifest.xml 中有 INTERNET 权限。在同一个应用程序中,我请求另一个 PHP 脚本,它按预期工作。
<uses-permission android:name="android.permission.INTERNET" />
有什么想法吗?
【问题讨论】:
-
请做 var_dump($_POST) 进行调试。
-
不是真正的解决方案,而是更多的建议:android is very old and not maintained 中的 Apache HTTP 库。你最好使用 HttpsUrlConnection 或改造之类的库。
-
当我做一个 var_dump($_POST) 我得到 "RETURN array(0) { }"
-
在我的本地网络服务器上运行上述代码没有问题。 var_dump 结果:
array(3) { ["id"]=> string(5) "12345" ["name"]=> string(4) "John" ["post"]=> string(7) "test123" } -
我将 PHP 脚本放在另一台服务器上,它成功了!但是我仍然需要找出第一台服务器的问题,因为我是它应该实际运行的服务器。什么可能导致服务器拒绝 POST 请求?一旦响应状态代码为 200,则 URL 是正确的。