黑马程序员技术交流社区

标题: HttpClient get请求在HttpResponse中无法获得Location的问题 [打印本页]

作者: HM代景康    时间: 2013-10-15 16:04
标题: HttpClient get请求在HttpResponse中无法获得Location的问题
 我通过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





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2