JSOUP獲取網頁數據返回403錯誤(403 error loading URL,connection類)

最近做的項目需要利用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 name
value - header value
Returns:
this Connection, for chaining
See Also:
Connection.Base.headers()

 

在上面的糾正代碼中可以看到我在header裏name設置的是User-Agent(表示我要設置的header中的字段,後面的第二個參數value就是對這個字段賦的值)。header value中設置的是操作系統,瀏覽器,語言類型等等信息(慚愧,我也沒完全知道每個值的意思)。這樣提交的請求有了比較完善的頭信息後,一般的網站server就更樂意服務了。

 技術相關更多文章猛擊:哇啦天堂論壇技術區

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章