Python 爬虫 Request(请求头)和Response(响应头)的 内容详解 【爬虫资料二】
Resquest請求頭【以訪問知乎】為例(使用Fiddler抓的包)
請求行包含的信息:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?請求的方法(POST)? #其他的方法還有GET、HEAD、PUT、DELETE、OPTIONS、TRACE
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?請求的路徑(/aoi/v3/oauth/sign_in)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?請求的主機(www.zhihu.com)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?請求的協議 (HTTP/1.1)? #其他的方法還有HTTP/1.0、HTTP/2.0
【上面的列出來的請求方法不是所有的WEB SERVER都會被允許的】
請求方法:
- 【GET】:?請求頁面,并返回頁面內容;
- 【HEAD】:(獲取響應頭)和GET(獲取資源)返回的內容基本一致:HEAD一般用于我們確認那個圖片是否還存在,不需要返回圖片
- 【POST】:大多用于提交表單或上傳文件,數據包含在請求體中;
- 【PUT】:從客戶端向服務器傳送的數據取代指定文梢中的內容
- 【DELETE】:請求服務器刪除指定的頁面
- 【CONNECT】:?把服務器當作跳板,讓服務器代替客戶端訪問其他網頁
- 【TRACE】(回顯你的請求):比如說你想看服務器有沒有修改的你的請求,服務器就會把最后收到的請求的信息返回給你(一般這種返回405,方法不被允許);主要用于診斷;
- 【OPTIONS】:允許客戶端查看服務器的性能
請求協議:
HTTP:超文本傳輸協議(Hyper Text Transfer Protocol )
- HTTP 協議是用于從網絡傳輸超文本數據到本地瀏覽器的傳送協議,它能保證高效而準確地傳送超文本文檔
HTTPS:超文本傳輸協議(Hyper Text Transfer Protocol over Secure Socket Layer)
- 即使:HTTP下加入SSL層加密
- 建立一個信息安全通道來保證數據傳輸的安全
- 確認網站的真實性,凡是使用了 HTTPS 的網站,都可以通過點擊瀏覽器地址欄的鎖頭標志來查看網站認證之后的真實信息,也可以通過 CA 機構頒發的安全簽章來查詢
即HTTPS和HTTP也可統稱為HTTP協議
【HTTP協議:HTTP/1.0? 一次請求-響應,建立一個連接,用完關閉;每一個請求都要建立一個連接;
? ? ? ? ? ? ? ? ? ? ? ? ?HTTP/1.1? Pipeling解決方式為,若干個請求排隊串行化單線程處理,后面的請求等待前面請求的返回才能獲得執行機會,一旦有某請求超時等,后續請求只能被阻塞,毫無辦法,也就是人們常說的線頭阻塞;
? ? ? ? ? ? ? ? ? ? ? ? HTTP/2.0 多個請求可同時在一個連接上并行執行。某個請求任務耗時嚴重,不會影響到其它連接的正常執行】
HEADER請求頭信息:(key:value)
- User_Agent(客戶端信息):?Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0(客戶端的信息:瀏覽器,操作系統,瀏覽起的版本)
- Accept(請求報頭域,用于指定客戶端可接受哪些類型的信息):??text/html,application/xhtml+xml,application/xml;q=0.9 (客戶端支持接受的信息類型:文本信息,q=0.9(表示權重))? ? #?image/webp,image/apng,/;q=0.9(接受的圖片信息)? ? ? ?*/*(表示所有的信息)
- Accept-Language(指定客戶端可接受的語言類型):zh-CN,zh;q=0.9 (客戶端支持接受的語言:中文,q:權重 以逗號隔開,zh-CN的優先級高于zh,zh的權重占0.9)? ?#? en-US,en,q=0.5 (英文的格式)
- ?Accept-Encoding(指定客戶端可接受的內容編碼):gzip, deflate, br (客戶端支持的解碼格式)? ?#服務器傳輸的時候會對內容進行壓縮,解壓的時候是客戶端(瀏覽器)自動解壓
- ?Accept-Length:712(客戶端支持的數據長度)
- Accept-Charset:gbk,utf-8;q=0.8 (客戶端支持的字符集)
- Content-Type(也叫互聯網媒體類型( Internet Media Type )或者 MIME 類型,在 HTT 協議消息頭中,它用來表示具體請求中的媒體類型信息):application/x-www-form-urlencoded (請求體的協議類型:表單形式的(POST))?# get請求這里是空的,post請求實在body中和數據一起發送的,
- 【application/x-www-forrn-urlencoded】?:?表單數據
- 【multi part/form-data】:表單文件上傳
- 【application/json】:序列化 JSON 數據,用這個類型需要參數本身就是json格式的數據,參數會被直接放到請求實體里,不進行任何處理。服務端/客戶端會按json格式解析數據?
- 【text/xml】:XML 數據
?
- ?Connectiong:keep-alive (此處的連接是指TCP(傳輸層)而不是HTTP)? ? ? ?#Keep-alive詳細說明
- HOST:用于指定請求資源的主機 IP 和端口號,其內容為請求 URL 的原始服務器或網關的位置,從HTTP1.1版本開始
- ?Cookie:也常用復數形式 Cookies ,這是網站為了辨別用戶進行會話跟蹤而存儲在用戶本地的數據 它的主要功能是維持當前訪問會話 例如,我們輸入用戶名和密碼成功登錄某個網站后,服務器會用會話保存登錄狀態信息,后面我們每次刷新或請求該站點的其他頁面時,會發現都是登錄狀態,這就是 Cookies 的功 Cookies 里有信息標識了我們所對應的服務器的會話,每次瀏覽器在請求該站點的頁面時,都會在請求頭中加上 Cookies 并將其發送給服務器,服務器通過 Cookies 識別出是我們自己,并且查出當前狀態是登錄狀態,所以返回結果就是登錄之后才能看到的網頁內容、
- ?Referer(此內容用來標識這個請求是從哪個頁面發過來的,服務器可以拿到這 信息并做相應的處理,如做來源統計、防盜鏈處理等): https://segmentfault.com/q/1010000002578217/a-1020000002578576? ?(表示信息來源,可以做網站統計) 防盜鏈? ? #挺全的
- ? Cookic-Control:緩存機制? 找了個詳細的? ?#http請求頭緩存j
我們再用Fiddler抓包(其他抓包工具)的時候都遇到過【304-未修改(取得時緩存,減輕服務器壓力)】
我們第一次向服務請求的時候
Request
Response? ?【響應頭會返回Last-Modified:圖片的最后的修改的日期】
?
當我們第二次發送請求的時候
Request? 【客戶端給服務器,信息向服務器確認】
【If -Modified-Since】:向服務器確認這個圖片在這個時間之后又沒有修改,如果在這個時間之后修改了請給我最新的
【If-Modified-Match】:攜帶的第一次請求時候Respose的Etage,這是在服務器中生成的哈希值
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?第二次在次服務器就會攜帶這個哈希值,If -Modified-Since一同去匹配,如果修改了,就給最新的;沒有修改,就讀取本地緩存
Response
響應頭信息會顯示 304 Not Modified
Last-Modified、Etag一同返回回來
?
Response請求頭【以訪問知乎】為例(使用Fiddler抓的包)
?
響應行信息:
- ? 協議(HTTP/1.1)? #HTTP/1.0? #HTTP2.0已經在請求行信息的時候說明過了
- 狀態碼(200:請求被服務器成功處理)? #還有其他? 404(頁面找不到)/304(未修改:取得是本地的緩存,服務器為修改)/? 301/302(永久/臨時重定向)/ 307(重定向中保持原有的數據請求)/ 500(服務器內部錯誤)/ 503(服務區暫時不可用)這些都是常見的狀態碼
- ?狀態文字:ok? ? #一般是狀態碼和文字連用,狀態碼的進一步說明例如:304? : No? Modified
- ?Server:包含務器的信息 ,比如 、版本號等
響應頭信息:
- ?Content-Type:applicatuon/json? ? #響應的信息類型和字符集? 截圖的例子中,只是響應的數據類型,沒有字符集,這部分在Request中響應頭信息的Contrnt-Type的類型是一樣,這里就不多說了(可以看下Request種的請求頭信息)
- ?Content-Length:231? ? ?#響應的內容長Re度
- Connection:keep-alive? ?# 和Request中響應頭信息的Connection是一樣,這里就不多說了(可以看下Request種的請求頭信息)
- Date(標識響應產生的時間):Sun, 29 Mar 2020 04:26:40 GMT? #響應報文的時間
- ?Cache-Control:no-cache, no-store, must-revalidate, private, max-age=0? # 緩存機制? 找了個詳細的? #HTTP請求頭的緩存
- ? Expires(指定響應過期時間, 可以使代理務器或瀏覽器將加載的內容更新到緩存中,如果再次訪問時,就可直接從緩存中加載, 降低服務器負載,縮短 加載時間):Thu, 01 Jan 1970 08:00:00 CST? ?#緩存過期的日期的
- ??Set-Cookie(設置 Cookie 應頭中的 Set Cook 告訴瀏覽器需要將此內容放在 Co kies中,下次請求攜帶Cookies請求):響應頭中有Set-Cookie: username=JasonChi,那么瀏覽器會在當前頁面所在域名設置cookie字符串。?#?Set-Cookie:的解說說明
- Last-Modified :指定資源 最后修改時間
?
總結
以上是生活随笔為你收集整理的Python 爬虫 Request(请求头)和Response(响应头)的 内容详解 【爬虫资料二】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【软考】软件攻城狮考试(四)——面向对象
- 下一篇: 奔驰车主维权告诉我们什么?