最近做的項目需要利用JSOUP進行網頁獲取和解析,但是遇到了拒絕訪問的問題,返回的結果是:
java.io.IOException: 403 error loading URL http://www.xxx.com/xxx
連接代碼是這樣的:
Document doc = Jsoup.connect(urlString).get();
原本這種方式在大部分時間都可以正確的獲取網頁代碼。
403錯誤是權限問題拒絕訪問,大家都知道的。
我搜了下原因,原來是請求內容不完全,然後我寫了如下代碼就OK了。
Document doc = Jsoup.connect(urlString).header("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2").get();
原因分析:
有些網站的服務器在響應http請求的時候,需要客戶端提交的信息比較完善,而在Jsoup的Connection類中這個Header就是完善請求信息用的。
我們的瀏覽器在請求網頁的時候會在請求的頭部head中發送一些數據,比如瀏覽器類型,版本,語言等等。當我們用Jsoup去完成請求網頁的工作時,最好也要完善請求包頭信息,完成這個工作的就是header方法。
header
Connection header(String name, String value)
- Set a request header.
-
- Parameters:
name
- header namevalue
- header value- Returns:
- this Connection, for chaining
- See Also:
Connection.Base.headers()
在上面的糾正代碼中可以看到我在header裏name設置的是User-Agent(表示我要設置的header中的字段,後面的第二個參數value就是對這個字段賦的值)。header value中設置的是操作系統,瀏覽器,語言類型等等信息(慚愧,我也沒完全知道每個值的意思)。這樣提交的請求有了比較完善的頭信息後,一般的網站server就更樂意服務了。
技術相關更多文章猛擊:哇啦天堂論壇技術區