我通过httpclient的get方法访问,通过返回的response的头部的location可以得到服务器的重定向地址(Location)
在java环境下测试都没问题
可是在安卓SDK环境下 却得不到response的location
通过抓包分析,发现在android下,
httpclient的实例执行get请求后,一起连重定向的get方法都执行了
所以最后得到的response是重定向之后地址的get请求的response,所以得不到locatioon,而且responseCode==200,而不是在java测试环境下的302,说明这个时候的response是重定向之后的response
这个时候需要阻止HttpClient的自动重定向,方法如下:
public static String getLocationMethod(String reqUrl, Context context) {
DefaultHttpClient httpclient = new DefaultHttpClient();
String location = null;
int responseCode = 0;
try {
final HttpGet request = new HttpGet(reqUrl);
HttpParams params = new BasicHttpParams();
params.setParameter("http.protocol.handle-redirects", false); // 默认不让重定向
// 这样就能拿到Location头了
request.setParams(params);
HttpResponse response = httpclient.execute(request);
responseCode = response.getStatusLine().getStatusCode();
Header[] headers = response.getAllHeaders();
if(responseCode==302){
Header locationHeader = response.getFirstHeader("Location");
if (locationHeader != null) {
location = locationHeader.getValue();
}
}
} catch (Exception e) {
e.printStackTrace();
MyLog.d("exception=", e.toString());
}
return location;
}
添加 params.setParameter("http.protocol.handle-redirects", false);之后返回结果如下:
ResponseCode= 302
Date:Sun, 04 Jan 1970 18:38:36 GMT
Server:Abloomy Http Server 1.0
Connection:Close
Cache-Control:no-store
Pragma:no-caches
Last-Modified:Sun, 04 Jan 1970 18:38:36 GMT
Content-Typ:text/html; charset=iso-8859-1
Content-Length:1016
Expires:Mon, 01 Jan 1980 08:00:00 GM
Location:http://124.205.91.166/i8n/index.php?wlanacip=124.205.91.166&wlanacname=124.205.91.180&wlanuserip=224.48.0.1&vslanusermac=f05a0965503c&vslanessid=ABLOOMY-WK
|
|