java使用HttpURLConnection檢索網站時403錯誤處理方式,httpurlconnection
java使用HttpURLConnection檢索網站時403錯誤處理方式:
我們通過代碼方式訪問網站時會報錯:
此種情況分2中類型,
1.需要登入才可以訪問;
2.需要設定User-Agent來欺騙伺服器。
connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
User Agent說明:
User Agent中文名為使用者代理程式,簡稱 UA,它是一個特殊字元串頭,使得伺服器能夠識別客戶使用的作業系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器外掛程式等。
一些網站常常通過判斷 UA 來給不同的作業系統、不同的瀏覽器發送不同的頁面,因此可能造成某些頁面無法在某個瀏覽器中正常顯示,但通過偽裝 UA 可以繞過檢測。
java訪問網站代碼:
/** * 發起http get請求擷取網頁原始碼 * @param requestUrl * @param isUserAgent 是否設定欺騙伺服器 * @return */ public static String httpRequest(String requestUrl,boolean isUserAgent) { StringBuffer buffer = null; try { // 建立串連 URL url = new URL(requestUrl); HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection(); httpUrlConn.setDoInput(true); httpUrlConn.setRequestMethod("GET"); if(isUserAgent){ httpUrlConn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); } // 擷取輸入資料流 InputStream inputStream = httpUrlConn.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); // 讀取返回結果 buffer = new StringBuffer(); String str = null; while ((str = bufferedReader.readLine()) != null) { buffer.append(str); } // 釋放資源 bufferedReader.close(); inputStreamReader.close(); inputStream.close(); httpUrlConn.disconnect(); } catch (Exception e) { e.printStackTrace(); } return buffer.toString(); }
執行結果:順利擷取到網頁代碼。
java 使用HttpURLConnection伺服器,如果發送時沒有問題,但返回結果時網路斷了,怎處理?
.setConnectTimeout() 指的是與請求網址的伺服器建立串連的逾時時間。
setReadTimeout() 指的是建立串連後如果指定時間內伺服器沒有返回資料的後逾時。
503是錯誤碼,能返回就說明伺服器返回了response。逾時指的是你指定的時間沒有收到伺服器的response。
不管哪種逾時都不有狀態代碼返回。因為返回是在response響應中的,而就是在設定的時間內沒有收到響應,才會逾時。如果出現逾時的話會拋出一個異常。你可以catch逾時異常,然後根據需要處理就行了。
java 對於HttpURLConnection的問題
加入下面代碼試下
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
httpURLConnection.setRequestMethod("POST");