請求Request 表頭(headers)
請求Request 表頭(headers)
前言大綱
請求Request 表頭(headers) 是描述客戶端(client)向伺服器端(server)發出 請求Request 時所使用的協議、編碼、以及傳送內容的長度。有的網站沒有反爬蟲機制,我們設計的網路爬蟲可以自由的爬取網站內容。有的網站有反爬蟲機制,伺服器就會針對所有客戶請求的表頭做檢查,然後判斷這是瀏覽器的請求或是這是非瀏覽器的請求,如果是非瀏覽器的請求,就會予以阻擋。
請求Request表頭的資料型態是字典
以下是常見的參數內容:
協定頭欄位名 | 說明 | 範例 | 狀態 |
---|---|---|---|
Accept | 能夠接受的回應內容類型(Content-Types)。參見內容協商。 | Accept: text/plain
|
常設 |
Accept-Charset | 能夠接受的字元集 | Accept-Charset: utf-8
|
常設 |
Accept-Encoding | 能夠接受的編碼方式列表。參考HTTP壓縮。 | Accept-Encoding: gzip, deflate
|
常設 |
Accept-Language | 能夠接受的回應內容的自然語言列表。參考 內容協商 。 | Accept-Language: en-US
|
常設 |
Accept-Datetime | 能夠接受的按照時間來表示的版本 | Accept-Datetime: Thu, 31 May 2007 20:35:00 GMT
|
臨時 |
Authorization | 用於超文字傳輸協定的認證的認證資訊 | Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
|
常設 |
Cache-Control | 用來指定在這次的請求/回應鏈中的所有快取機制 都必須 遵守的指令 | Cache-Control: no-cache
|
常設 |
Connection | 該瀏覽器想要優先使用的連接類型 | Connection: keep-alive
|
常設 |
Cookie | 之前由伺服器通過 Set- Cookie (下文詳述)傳送的一個 超文字傳輸協定 Cookie | Cookie: $Version=1; Skin=new;
|
常設: 標準 |
Content-Length | 以 八位位元組陣列 (8位元的位元組)表示的請求體的長度 | Content-Length: 348
|
常設 |
Content-MD5 | 請求體的內容的二進位 MD5 雜湊值,以 Base64 編碼的結果 | Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
|
過時的 |
Content-Type | 請求體的 MIME類型 (用於POST和PUT請求中) | Content-Type: application/x-www-form-urlencoded
|
常設 |
Date | 傳送該訊息的日期和時間(按照 RFC 7231 中定義的"超文字傳輸協定日期"格式來傳送) | Date: Tue, 15 Nov 1994 08:12:31 GMT
|
常設 |
Expect | 表明客戶端要求伺服器做出特定的行為 | Expect: 100-continue
|
常設 |
From | 發起此請求的使用者的郵件位址 | From: user@example.com
|
常設 |
Host | 伺服器的域名(用於虛擬主機 ),以及伺服器所監聽的傳輸控制協定埠號。如果所請求的埠是對應的服務的標準埠,則埠號可被省略。自超檔案傳輸協定版本1.1(HTTP/1.1)開始便是必需欄位。 | Host: zh.wikipedia.org:80
|
常設 |
If-Match | 僅當客戶端提供的實體與伺服器上對應的實體相匹配時,才進行對應的操作。主要作用時,用作像 PUT 這樣的方法中,僅當從使用者上次更新某個資源以來,該資源未被修改的情況下,才更新該資源。 | If-Match: "737060cd8c284d8af7ad3082f209582d"
|
常設 |
If-Modified-Since | 允許在對應的內容未被修改的情況下返回304未修改( 304 Not Modified ) | If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
|
常設 |
If-None-Match | 允許在對應的內容未被修改的情況下返回304未修改( 304 Not Modified ),參考 超文字傳輸協定 的實體標記 | If-None-Match: "737060cd8c284d8af7ad3082f209582d"
|
常設 |
If-Range | 如果該實體未被修改過,則向我傳送我所缺少的那一個或多個部分;否則,傳送整個新的實體 | If-Range: "737060cd8c284d8af7ad3082f209582d"
|
常設 |
If-Unmodified-Since | 僅當該實體自某個特定時間已來未被修改的情況下,才傳送回應。 | If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT
|
常設 |
Max-Forwards | 限制該訊息可被代理及閘道器轉發的次數。 | Max-Forwards: 10
|
常設 |
Origin | 發起一個針對 跨來源資源共享 的請求(要求伺服器在回應中加入一個『存取控制-允許來源』('Access-Control-Allow-Origin')欄位)。 | Origin: http://www.example-social-network.com
|
常設: 標準 |
Pragma | 與具體的實現相關,這些欄位可能在請求/回應鏈中的任何時候產生多種效果。 | Pragma: no-cache
|
常設但不常用 |
Proxy-Authorization | 用來向代理進行認證的認證資訊。 | Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
|
常設 |
Range | 僅請求某個實體的一部分。位元組偏移以0開始。參見位元組服務。 | Range: bytes=500-999
|
常設 |
Referer | 表示瀏覽器所存取的前一個頁面,正是那個頁面上的某個連結將瀏覽器帶到了當前所請求的這個頁面。 | Referer: http://zh.wikipedia.org/wiki/Main_Page
|
常設 |
TE | 瀏覽器預期接受的傳輸編碼方式:可使用回應協定頭 Transfer-Encoding 欄位中的值;另外還可用"trailers"(與"分塊 "傳輸方式相關)這個值來表明瀏覽器希望在最後一個尺寸為0的塊之後還接收到一些額外的欄位。 | TE: trailers, deflate
|
常設 |
User-Agent | 瀏覽器的瀏覽器身分標識字串 | User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0
|
常設 |
Upgrade | 要求伺服器升級到另一個協定。 | Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
|
常設 |
Via | 向伺服器告知,這個請求是由哪些代理髮出的。 | Via: 1.0 fred, 1.1 example.com (Apache/1.1)
|
常設 |
Warning | 一個一般性的警告,告知,在實體內容體中可能存在錯誤。 | Warning: 199 Miscellaneous warning
|
常設 |
上述之一般標準表頭(headers),設計網路爬蟲時建議加上 User-Agent 參數,如果網站有反爬蟲機制一定會檢查 User-Agent 參數。下列是 Python 程式設計網路爬蟲時的一個請求表頭設計:
Headers = { 'Accept':'text/html', 'Accept-Charset':'utf-8', 'Accept-Language':'zh-tw', 'User-Agent':'Mozilla/5.0(Windows NT 6.1;WOW64)\AppleWebKit/537.36(KHTML, like Gecko)Chrome/54.0.2454.101\Safari/537.36', }
在網路爬蟲程式設計師時,碰上有反爬蟲的網站,表頭只要有 User-Agent 大都情況也是可以正常爬取網頁內容了,習慣上又將含有表頭的部分稱為偽裝瀏覽器。
留言
張貼留言
Aron阿龍,謝謝您的留言互動!