日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

【Python网络蜘蛛】:基础 - HTTP基本原理

發(fā)布時(shí)間:2024/1/18 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python网络蜘蛛】:基础 - HTTP基本原理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 1.1 HTTP基本原理
    • 1. URI和URL
    • 2. HTTP和HTTPS
    • 3. HTTP請(qǐng)求過(guò)程
    • 4. 請(qǐng)求
    • 5. 響應(yīng)

1.1 HTTP基本原理


1. URI和URL

URI為統(tǒng)一資源標(biāo)識(shí)符,URL為統(tǒng)一資源定位符。
舉個(gè)例子理解:http://github.com/favicon.ico 既是一個(gè)URI,也是一個(gè)URL,即有一個(gè)圖標(biāo)資源favicon.ico,我們用URI/URL指定了訪問(wèn)它的唯一方式,其中包括訪問(wèn)協(xié)議https、訪問(wèn)路徑和資源名稱。通過(guò)一個(gè)鏈接,便可以從互聯(lián)網(wǎng)中找到某個(gè)資源,這個(gè)鏈接就是URI/URL。

URL是URI的子集,即每個(gè)URL都是URI,但并非每個(gè)URI都是URL。

2. HTTP和HTTPS

在爬蟲(chóng)中,我們抓取的頁(yè)面通常是基于http或https協(xié)議的。

HTTP:中文名為超文本傳輸協(xié)議,其作用是把超文本數(shù)據(jù)從網(wǎng)絡(luò)傳輸?shù)奖镜貫g覽器,能夠保證高效而準(zhǔn)確地傳輸超文本文檔。

HTTPS:全稱是Hypertext Transfer Protocol over Secure Socket Layer,是以安全為目標(biāo)地HTTP通道,簡(jiǎn)單講就是HTTP的安全版,即在HTTP下加入SSL層,簡(jiǎn)稱HTTPS。
(HTTPS的安全基礎(chǔ)是SSL,因此通過(guò)該協(xié)議傳輸?shù)膬?nèi)容都是經(jīng)過(guò)SSL加密的)

3. HTTP請(qǐng)求過(guò)程

在瀏覽器地址欄中輸入一個(gè)URL,按下回車之后便可觀察到對(duì)應(yīng)的頁(yè)面內(nèi)容。實(shí)際上,這個(gè)過(guò)程是瀏覽器先向網(wǎng)站所在的服務(wù)器發(fā)送一個(gè)請(qǐng)求,網(wǎng)站服務(wù)器接收到請(qǐng)求后對(duì)其進(jìn)行處理和解析,然后返回對(duì)應(yīng)的響應(yīng),接著傳回瀏覽器。

為了更直觀地說(shuō)明上述過(guò)程,這里用Chrome瀏覽器開(kāi)發(fā)者模式下的Network監(jiān)聽(tīng)組件來(lái)做一下演示。

打開(kāi)Chrome瀏覽器,訪問(wèn)百度,鼠標(biāo)右鍵,點(diǎn)擊“檢查”,點(diǎn)擊Network

先觀察第一個(gè)網(wǎng)絡(luò)請(qǐng)求,即www.baidu.com,其中各列的含義如下。

  • 第一列Name:請(qǐng)求的名稱。一般用URL的最后一部分內(nèi)容作為名稱。
  • 第二列Status:響應(yīng)的狀態(tài)碼。這里顯示為200,代表響應(yīng)是正常的。通過(guò)狀態(tài)碼,我們可以判斷發(fā)送請(qǐng)求之后是否得到了正常的響應(yīng)。
  • 第三列Protocol:請(qǐng)求協(xié)議類型。這里http/1.1代表HTTP1.1版本,h2代表HTTP2.0版本。
  • 第四列Type:請(qǐng)求的文檔類型。這里document,代表我們這次請(qǐng)求是一個(gè)HTML文檔,內(nèi)容是一些HTML代碼。
  • 第五列Initiator:請(qǐng)求源。用來(lái)標(biāo)記請(qǐng)求是由哪個(gè)對(duì)象或進(jìn)程發(fā)起的。
  • 第六列Size:從服務(wù)器下載的文件或請(qǐng)求資源的大小。如果資源是從緩存中取得的,則該列會(huì)顯示from cache。
  • 第八列Waterfall:網(wǎng)絡(luò)請(qǐng)求的可視化瀑布流。

4. 請(qǐng)求

請(qǐng)求分為四部分內(nèi)容:請(qǐng)求方法(Request Method)、請(qǐng)求的網(wǎng)址(Request URL)、請(qǐng)求頭(Request Headers)、請(qǐng)求體(Request Body)。

4.1 請(qǐng)求方法
用于標(biāo)識(shí)請(qǐng)求客戶端請(qǐng)求服務(wù)端的方式,常見(jiàn)的請(qǐng)求方法有兩種:GET和POST
舉例理解:在百度引擎中搜索Python就是一個(gè)GET請(qǐng)求,鏈接為 http://www.baidu.com/s?wd=Python,其中URL中包含了請(qǐng)求的query信息,這里的參數(shù)wd表示要搜尋的關(guān)鍵字。POST請(qǐng)求大多在提交表單時(shí)發(fā)起。例如,對(duì)于一個(gè)登錄表單,輸入用戶名和密碼后,單擊“登錄”按鈕,這時(shí)通常會(huì)發(fā)起一個(gè)POST請(qǐng)求,其數(shù)據(jù)通常以表單的形式傳輸,而不會(huì)體現(xiàn)在URL中。

GET和POST請(qǐng)求方法的區(qū)別:
GET請(qǐng)求中的參數(shù)包含在URL里面,數(shù)據(jù)可以在URL中看到;而POST請(qǐng)求的URL不會(huì)包含這些數(shù)據(jù),數(shù)據(jù)都是通過(guò)表單形式傳輸?shù)?#xff0c;會(huì)包含在請(qǐng)求體中。

方法描述
GET請(qǐng)求頁(yè)面,并返回頁(yè)面內(nèi)容
HEAD類似于GET請(qǐng)求,只不過(guò)返回的響應(yīng)中沒(méi)有具體內(nèi)容。用于獲取報(bào)頭
POST大多用于提交表單或上傳文件,數(shù)據(jù)包含在請(qǐng)求體中
PUT用客戶端傳向服務(wù)器的數(shù)據(jù)取代指定文檔中的內(nèi)容
DELETE請(qǐng)求服務(wù)器刪除指定的頁(yè)面
CONNECT把服務(wù)器當(dāng)作跳板,讓服務(wù)器代替客戶端訪問(wèn)其他頁(yè)面
OPTIONS允許客戶端查看服務(wù)器性能
TRACE會(huì)顯示服務(wù)器收到的請(qǐng)求。只要用于測(cè)試或診斷

4.2 請(qǐng)求的網(wǎng)址
請(qǐng)求的網(wǎng)址,它可以唯一確定客戶端想請(qǐng)求的資源,即URL。

4.3請(qǐng)求頭
簡(jiǎn)要說(shuō)明一些常用的請(qǐng)求頭信息:

  • Accept:請(qǐng)求報(bào)頭域,用于指定客戶端可接受哪些類型的信息。
  • Accept-Language:用于指定客戶端可接受的語(yǔ)言類型。
  • Accept-Encoding:用于指定客戶端可接受的內(nèi)容編碼。
  • Host:用于指定請(qǐng)求資源的主機(jī)IP和端口號(hào),其內(nèi)容為請(qǐng)求URL的原始服務(wù)器或網(wǎng)關(guān)的位置。從 HTTP1.1版本開(kāi)始,請(qǐng)求必須包含此內(nèi)容。
  • Cookie:也常用復(fù)數(shù)形式Cookies,這是網(wǎng)站為了辨別用戶,進(jìn)行會(huì)話跟蹤而存儲(chǔ)在用戶本地的數(shù)據(jù)。它的主要功能是維持當(dāng)前訪問(wèn)會(huì)話。例如,輸入用戶名和密碼成功登錄某個(gè)網(wǎng)站后,服務(wù)器會(huì)用會(huì)話保存登錄狀態(tài)信息,之后每次刷新或請(qǐng)求該站點(diǎn)的其他頁(yè)面,都會(huì)發(fā)現(xiàn)處于登錄狀態(tài),這就是Cookie的功勞。Cookie里有信息標(biāo)識(shí)了我們所對(duì)應(yīng)的服務(wù)器的會(huì)話,每次瀏覽器在請(qǐng)求該站點(diǎn)的頁(yè)面時(shí),都會(huì)在請(qǐng)求頭中加上 Cookie并將其發(fā)送給服務(wù)器,服務(wù)器通過(guò)Cookie識(shí)別出是我們自己。并且查出當(dāng)前狀態(tài)是登錄狀態(tài),所以返回結(jié)果就是登錄之后才能看到的網(wǎng)頁(yè)內(nèi)容。
  • Referer:用于標(biāo)識(shí)請(qǐng)求是從哪個(gè)頁(yè)面發(fā)過(guò)來(lái)的,服務(wù)器可以拿到這一信息并做相應(yīng)的處理,如做來(lái)源統(tǒng)計(jì)、防盜鏈處理等。
  • User-Agent:簡(jiǎn)稱UA,這是一個(gè)特殊的字符串頭,可以使服務(wù)器識(shí)別客戶端使用的操作系統(tǒng)及版本、瀏覽器及版本等信息。做爬蟲(chóng)時(shí)如果加上此信息,可以偽裝為瀏覽器;如果不加,很可能會(huì)被識(shí)別出來(lái)。
  • Content-Type:也叫互聯(lián)網(wǎng)媒體類型(Internet Media Type)或者M(jìn)IME類型,在HTTP協(xié)議消息頭中,它用來(lái)表示具體請(qǐng)求中的媒體類型信息。例如,text/html代表HTML格式,image/gif代表GIF圖片,application/json代表JSON類型。

4.4 請(qǐng)求體
請(qǐng)求體,一般承載的內(nèi)容是POST請(qǐng)求中的表單數(shù)據(jù),對(duì)于GET請(qǐng)求,請(qǐng)求體為空。

例如,登錄GitHub時(shí)捕獲到的請(qǐng)求和響應(yīng)如下圖所示:

登錄之前,需要先填寫(xiě)用戶名和密碼信息,登錄時(shí)這些內(nèi)容會(huì)以表單數(shù)據(jù)的形式提交給服務(wù)器,此時(shí)需要注意Request Headers 中指定Content-Type 為 application/x-www-form-urlencoded。只有這樣設(shè)置Content-Type,內(nèi)容才會(huì)以表單數(shù)據(jù)的形式提交。另外,也可以將Content-Type 設(shè)置為application/json來(lái)提交json數(shù)據(jù),或者設(shè)置為multipart/form-data來(lái)上傳文件。

Content-TypePOST提交數(shù)據(jù)的方式
application/x-www-form-urlencoded表單數(shù)據(jù)
multipart/form-data表單文件上傳
application/json序列化JSON數(shù)據(jù)
text/xmlXML數(shù)據(jù)

5. 響應(yīng)

5.1 響應(yīng)狀態(tài)碼
常見(jiàn)的錯(cuò)誤狀態(tài)碼及錯(cuò)誤原因:

狀態(tài)碼說(shuō)明詳情
100繼續(xù)請(qǐng)求者應(yīng)當(dāng)繼續(xù)提出請(qǐng)求。服務(wù)器已校僅到明小·即力、I正在等待其余部分
101切換協(xié)議請(qǐng)求者已要求服務(wù)器切換協(xié)議,服務(wù)器已確認(rèn)并準(zhǔn)備切換
200成功服務(wù)器已成功處理了請(qǐng)求
201已創(chuàng)建請(qǐng)求成功并且服務(wù)器創(chuàng)建了新的資源
202已接收服務(wù)器已接收請(qǐng)求,但尚未處理
203非授權(quán)信息服務(wù)器已成功處理了請(qǐng)求,但返回的信息可能來(lái)自另一個(gè)源
204無(wú)內(nèi)容服務(wù)器成功處理了請(qǐng)求,但沒(méi)有返回任何內(nèi)容
205重置內(nèi)容服務(wù)器成功處理了請(qǐng)求,內(nèi)容被重置
206部分內(nèi)容服務(wù)器成功處理了部分請(qǐng)求
300多種選擇針對(duì)請(qǐng)求,服務(wù)器可執(zhí)行多種操作
301永久移動(dòng)請(qǐng)求的網(wǎng)頁(yè)已永久移動(dòng)到新位置,即永久重定向
302臨時(shí)移動(dòng)請(qǐng)求的網(wǎng)頁(yè)暫時(shí)跳轉(zhuǎn)到其他頁(yè)面,即暫時(shí)重定向
303查看其他位置如果原來(lái)的請(qǐng)求是POST,重定向目標(biāo)文檔應(yīng)該通過(guò)GET提取
304未修改此次請(qǐng)求返回的網(wǎng)頁(yè)未經(jīng)修改,繼續(xù)使用上次的資源
305使用代理請(qǐng)求者應(yīng)該使用代理訪問(wèn)該網(wǎng)頁(yè)
307臨時(shí)重定向臨時(shí)從其他位置響應(yīng)請(qǐng)求的資源
400錯(cuò)誤請(qǐng)求服務(wù)器無(wú)法解析該請(qǐng)求
401未授權(quán)請(qǐng)求沒(méi)有進(jìn)行身份驗(yàn)證或驗(yàn)證未通過(guò)
403禁止訪問(wèn)服務(wù)器拒絕此請(qǐng)求
404未找到服務(wù)器找不到請(qǐng)求的網(wǎng)頁(yè)
405方法禁用服務(wù)器禁用了請(qǐng)求中指定的方法
406不接收無(wú)法使用請(qǐng)求的內(nèi)容響應(yīng)請(qǐng)求的網(wǎng)貝
407需要代理授權(quán)請(qǐng)求者需要使用代理授權(quán)
408請(qǐng)求超時(shí)服務(wù)器請(qǐng)求超時(shí)
409沖突服務(wù)器在完成請(qǐng)求時(shí)發(fā)生沖突
410已刪除請(qǐng)求的資源已永久刪除
411需要有效長(zhǎng)度服務(wù)器不接收不含有效內(nèi)容長(zhǎng)度標(biāo)頭字段的請(qǐng)求
412未滿足前提條件服務(wù)器未滿足請(qǐng)求者在請(qǐng)求中設(shè)置的某一個(gè)前提條件
413請(qǐng)求實(shí)體過(guò)大請(qǐng)求實(shí)體過(guò)大,超出服務(wù)器的處理能力
414請(qǐng)求URI過(guò)長(zhǎng)請(qǐng)求網(wǎng)址過(guò)長(zhǎng),服務(wù)器無(wú)法處理
415不支持類型請(qǐng)求格式不被請(qǐng)求頁(yè)面支持
416請(qǐng)求范圍不符頁(yè)面無(wú)法提供請(qǐng)求的范圍
417未滿足期望值服務(wù)器未滿足期望請(qǐng)求標(biāo)頭字段的要求
500服務(wù)器內(nèi)部錯(cuò)誤服務(wù)器遇到錯(cuò)誤,無(wú)法完成請(qǐng)求
501未實(shí)現(xiàn)服務(wù)器不具備完成請(qǐng)求的能力
502錯(cuò)誤網(wǎng)關(guān)服務(wù)器作為網(wǎng)關(guān)或代理,接收到上游服務(wù)器的無(wú)效響應(yīng)
503服務(wù)不可用服務(wù)器目前無(wú)法使用
504網(wǎng)關(guān)超時(shí)服務(wù)器作為網(wǎng)關(guān)或代理,沒(méi)有及時(shí)從上游服務(wù)器接收到請(qǐng)求
505HTTP版本不支持服務(wù)器不支持請(qǐng)求中使用的HTTP協(xié)議版本

5.2 響應(yīng)頭
響應(yīng)頭,包含了服務(wù)器對(duì)請(qǐng)求的應(yīng)答信息,如Content-Type、Server、Set-Cookie等。下面簡(jiǎn)要說(shuō)明一些常用的響應(yīng)頭信息。

  • Date:用于標(biāo)識(shí)響應(yīng)產(chǎn)生的時(shí)間。
  • Last-Modified:用于指定資源的最后修改時(shí)間。
  • Content-Encoding:用于指定響應(yīng)內(nèi)容的編碼。
  • Server:包含服務(wù)器的信息,例如名稱、版本號(hào)等。
  • Content-Type:文檔類型,指定返回的數(shù)據(jù)是什么類型,如 texthtml 代表返回 HTML 文檔,application/x-javascript代表返回JavaScript文件,image/jpeg代表返回圖片。
  • Set-Cookie:設(shè)置Cookie。響應(yīng)頭中的Set-Cookie用于告訴瀏覽器需要將此內(nèi)容放在Cookie中,下次請(qǐng)求時(shí)將Cookie攜帶上。
  • Expires:用于指定響應(yīng)的過(guò)期時(shí)間,可以讓代理服務(wù)器或?yàn)g覽器將加載的內(nèi)容更新到緩存中。當(dāng)再次訪問(wèn)相同的內(nèi)容時(shí),就可以直接從緩存中加載,達(dá)到降低服務(wù)器負(fù)載、縮短加載時(shí)間的目的。

總結(jié)

以上是生活随笔為你收集整理的【Python网络蜘蛛】:基础 - HTTP基本原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。