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
無論是自動跳轉還是手動處理跳轉都沒有問題。