几个星期前我在WebView中遇到了一个问题,它没有像普通浏览器那样关注重定向。我在许多SO答案中使用了以下建议:
String newUrl = response.getFirstHeader("Location").getValue();
但它只提供了一步重定向,但不是更多,它需要它。我通过反复监听重定向并手动完成每一步来解决这个问题。
现在我使用以下代码:
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重定向到另一个网址。它在浏览器和iPad版本的应用程序中运行良好,但对于Android,我得到org.apache.http.client.HttpResponseException: Not Found
。
我觉得非常奇怪的是Android在重定向时非常痛苦。为什么它会像这样,是否有合理的方法呢?
答案 0 :(得分:0)
实际上,the answer I linked to in my comment适用于HttpClient 4.1,我可以说,而且Android的版本较旧。
我的猜测是Android的HttpClient版本中的等效过程是:
DefaultRedirectHandler
的子类,根据您的应用覆盖isRedirectRequested()
DefaultHttpClient
的子类并覆盖createRedirectHandler()
以返回您在上一步中创建的子类的实例DefaultHttpClient
的子类替代DefaultHttpClient