請求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

Connection: Upgrade

常設
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

Host: zh.wikipedia.org

常設
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 大都情況也是可以正常爬取網頁內容了,習慣上又將含有表頭的部分稱為偽裝瀏覽器。 

參考資料

特色、摘要,Feature、Summary:

關鍵字、標籤,Keyword、Tag:

留言

這個網誌中的熱門文章

Ubuntu 常用指令、分類與簡介

iptables的觀念與使用

網路設定必要參數IP、netmask(遮罩)、Gateway(閘道)、DNS

了解、分析登錄檔 - log

Python 與SQLite 資料庫

Blogger文章排版範本

Pandas 模組

如何撰寫Shell Script

查詢指令或設定 -Linux 線上手冊 - man

下載網頁使用 requests 模組