1. 程式人生 > >HttpURLConnection碰到連續302跳轉的問題的原因及解決方法

HttpURLConnection碰到連續302跳轉的問題的原因及解決方法

用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);

無論是自動跳轉還是手動處理跳轉都沒有問題。