【问题标题】:Android HttpPost send empty $_POST to a PHP scriptAndroid HttpPost 将空 $_POST 发送到 PHP 脚本
【发布时间】: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"]=&gt; string(5) "12345" ["name"]=&gt; string(4) "John" ["post"]=&gt; string(7) "test123" }
  • 我将 PHP 脚本放在另一台服务器上,它成功了!但是我仍然需要找出第一台服务器的问题,因为我是它应该实际运行的服务器。什么可能导致服务器拒绝 POST 请求?一旦响应状态代码为 200,则 URL 是正确的。

标签: php android post


【解决方案1】:

如果您的 HttpPost 网址有 "www",请将其删除并尝试。如果不加 www.

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

【讨论】:

    猜你喜欢
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    相关资源
    最近更新 更多