Android HttpPost将空$ _POST发送到PHP脚本

时间:2014-09-30 14:28:34

标签: php android post

我一直在尝试从我的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 = 

我没有收到任何错误警告,应用程序也没有崩溃。

我尝试将变量作为附加到URL的GET请求,并更改了我的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" />

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您的HttpPost网址已“www”,请将其删除并尝试。如果没有添加www。

因为您可能已将 yoursite.com 重定向到 www.yoursite.com ,反之亦然。在这种情况下,您的HttpPost URL应该是指定URL而不是重定向URL。在HTTP重定向过程中,参数将丢失,并且将执行空POST。这就是服务器没有收到您的帖子数据的原因。