您的位置:首页 > 理论基础 > 计算机网络

HttpURLConnection碰到连续302跳转的问题的原因及解决方法

2013-06-30 23:24 483 查看
用HttpURLConnection联网的代码:

      HttpURLConnection conn = null;

      URL url = new URL("http://10.0.0.172/");

      conn = (HttpURLConnection) url.openConnection();

      conn .setRequestMethod("POST");

      conn .setDoInput(true);

      conn .setDoOutput(true);

      conn.setRequestProperty("X-Online-Host","www.xxxx.com");

      conn.setConnectTimeout(30000); // 30秒超时

      conn.connect();

 

如果返回的页面是一个302跳转,会自动跳转,但是如果跳转过去后还是一个302跳转,就卡在connect()这里了,超时之后一个 connection reset 的 exception. 不论Get还是Post方法,都一样问题。用setFollowRedirects关掉自动重定向,还是connection reset. 查了很长时间,还是弄不出个所以然来,看HttpURLConnection 的实现代码,redirect大于4次才会抛出一个Too many redirects
的异常,这才两个302就挂了...最后换用org.apache.http包里的东西,就没有问题。

 

  DefaultHttpClient httpClient = new DefaultHttpClient();

  HttpHost proxy = new HttpHost("10.0.0.172", 80);

  httpClient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY,proxy);

  HttpConnectionParams.setConnectionTimeout(httpClient.getParams(),20 * 1000);

  HttpConnectionParams.setSoTimeout(httpClient.getParams(), 20 * 1000);

  HttpGet httpget = new HttpGet(theurl);

  HttpResponse response = httpClient.execute(httpget);

 

无论是自动跳转还是手动处理跳转都没有问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: