【问题标题】:Android 4.0 Turns POST into GETAndroid 4.0 将 POST 变成 GET
【发布时间】:2012-02-20 10:39:47
【问题描述】:

我有一个要移植到 ICS 的 Gingerbread Android 应用程序。此应用程序与发送 HTTP POST 的 Web 服务器通信。我的应用程序在 Gingerbread 上运行良好。但是,在将其移植到 ICS 后,我遇到了问题。我发现我的应用程序发送的 POST 请求实际上已更改为 GET。

有趣的是,Android 实际上报告说确实使用了 POST。

URL oURL = new URL(sURL);

HttpURLConnection oHTTPConnection = (HttpURLConnection)(oURL.openConnection());
oHTTPConnection.setDoInput(true);
oHTTPConnection.setDoOutput(true);
oHTTPConnection.setRequestMethod("POST");

// set headers...
int nResponse = oHTTPConnection.getResponseCode();

String sMethod = oHTTPConnection.getRequestMethod();  // Returns "POST"

但是,服务器会另说。我修改了 Web 服务器应用程序以检查它接收到的请求方法,然后将此值放入它发送回我的 Android 应用程序的响应正文中。我在 Android 应用程序上收到的是“GET”。

我曾尝试将 HttpClient 与 HttpPost 一起使用,但我遇到了同样的问题。

正如我所提到的,我在 Gingerbread 中没有这个问题。另外,我从另一个线程中读到了一个类似(但相反)的问题,它也只发生在 ICS 中:Android 4.0 ICS turning HttpURLConnection GET requests into POST requests

有其他人经历过吗?谁能帮我解决这个问题?

提前致谢!

【问题讨论】:

  • 你试过加oHTTPConnection.setRequestProperty("Content-Type","application/x-www-form-urlendcoded");吗?
  • @MagnusJohansson 是的,我已经尝试过那个,但是,没有运气。 :/ 无论如何谢谢...

标签: java android httpurlconnection android-4.0-ice-cream-sandwich


【解决方案1】:

尝试按照这个答案:https://stackoverflow.com/a/8799198/372076

我发现,在 ICS 之前,人们可以通过制作无身体来侥幸 POST 不提供 Content-Length 值,但是你在 ICS 后 必须设置 Content-Length: 0。

【讨论】:

  • 谢谢,但也没有用。我删除了上面发布的部分代码,但事实上,我已经将 Content-Length 设置为 0。我从 Gingerbread 版本开始就一直在这样做。
【解决方案2】:

不知道您是否已经找到解决此问题的方法,但我遇到了同样的问题,只是找到了解决方法。就我而言,这是Apache重定向的服务器端问题。我在做:

Url url = new Url("http://aaaa.bbbb.com/");

改为:

Url url = new Url("http://aaaa.bbbb.com/index.php");

不知何故,重定向将我的 POST 变成了没有参数的 GET。

【讨论】:

  • 重定向通过发送标头“Location: new url”来工作,http 客户端使用 GET 跟随此 url,而不管原始请求方法如何。所以这不是服务器的问题。
  • 当您将请求发布到 http 端点并且服务器重定向到 https 等效项时,也会发生这种情况。
猜你喜欢
  • 1970-01-01
  • 2012-01-01
  • 2012-05-29
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 2022-11-07
  • 2014-05-12
相关资源
最近更新 更多