【发布时间】:2013-03-18 12:54:48
【问题描述】:
几周前我在 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 在重定向方面如此痛苦。为什么它会有这样的行为,是否有合理的解决方法?
【问题讨论】:
-
这并没有说明为什么会这样,而且那个 SO 问题没有一个公认的答案。您链接的博客文章还说“默认情况下 DefaultHttpClient 将自动处理重定向”,但它似乎没有这样做。
-
第一个链接确实“说明为什么会这样”并且确实有一个公认的答案。
-
没有注意到文字上的第一个链接。
-
如果您愿意将此作为答案发布,我会接受,或者我会删除该问题,而不是让未回答的问题四处游荡。
标签: android redirect apache-httpclient-4.x