0

几周前,我在 WebView 中遇到了一个问题,它没有像普通浏览器那样遵循重定向。我使用了许多 SO 答案中给出的以下建议:

String newUrl = response.getFirstHeader("Location").getValue();

但它只提供了 1 步重定向,但没有更多,这是它需要的。我通过反复监听重定向并手动完成每个步骤来解决它。

现在我正在使用以下代码:

HttpClient httpClient = MyApp.getHttpClient();
HttpPost httpPost = new HttpPost(con.getString(R.string.platform_url_getBalances));

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("sid", String.valueOf(sessionKey)));
ResponseHandler<String> responseHandler = new BasicResponseHandler();

httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

String response = null;

// Execute HTTP Post Request. Response body returned as a string
response = httpClient.execute(httpPost, responseHandler);

最近更改了端点,R.string.platform_url_getBalances但我们将 302 重定向到不同的 URL。它在浏览器和应用程序的 iPad 版本上运行良好,但对于 Android,我得到org.apache.http.client.HttpResponseException: Not Found.

我觉得很奇怪,Android 在重定向方面如此痛苦。为什么它会有这样的行为,是否有合理的解决方法?

4

1 回答 1

0

实际上,我在评论中链接到的答案是针对 HttpClient 4.1,据我所知,Android 的版本较旧。

我的猜测是 Android 版本的 HttpClient 中的等效过程是:

  • 根据您的应用创建DefaultRedirectHandler覆盖的子类isRedirectRequested()
  • 创建一个子类DefaultHttpClient并覆盖createRedirectHandler()以返回您在上一步中创建的子类的实例
  • 无论您在哪里创建该实例,都可以使用您的子类DefaultHttpClient作为其自身的替代品DefaultHttpClient
于 2013-03-18T13:28:54.097 回答