我通过httpclient的get方法访问通过返回的response的头部的location可以得到服务器的重定向地址(Location)
在java环境下测试都没问题
可是在安卓SDK环境下 却得不到response的location
通过抓包分析发现在android下
httpclient的实例执行get请求后一起连重定向的get方法都执行了
所以最后得到的response是重定向之后地址的get请求的response所以得不到locatioon而且responseCode==而不是在java测试环境下的说明这个时候的response是重定向之后的response
这个时候需要阻止HttpClient的自动重定向方法如下
public static String getLocationMethod(String reqUrl Context context) {
DefaultHttpClient httpclient = new DefaultHttpClient();
String location = null;
int responseCode = ;
try {
final HttpGet request = new HttpGet(reqUrl);
HttpParams params = new BasicHttpParams();
paramssetParameter(redirects false); // 默认不让重定向
// 这样就能拿到Location头了
requestsetParams(params);
HttpResponse response = (request);
responseCode = responsegetStatusLine()getStatusCode();
Header[] headers = responsegetAllHeaders();
if(responseCode==){
Header locationHeader = responsegetFirstHeader(Location);
if (locationHeader != null) {
location = locationHeadergetValue();
}
}
} catch (Exception e) {
eprintStackTrace();
MyLogd(exception= etoString());
}
return location;
}
添加 paramssetParameter(redirects false);之后返回结果如下
ResponseCode=
Date:Sun Jan :: GMT
Server:Abloomy Http Server
Connection:Close
CacheControl:nostore
Pragma:nocaches
LastModified:Sun Jan :: GMT
ContentTyp:text/html; charset=iso
ContentLength:
Expires:Mon Jan :: GM
Location:?wlanacip=&wlanacname=&wlanuserip=&vslanusermac=fac&vslanessid=ABLOOMYWK