Python中的HTTP請(qǐng)求庫(kù)Requests的具體使用
在現(xiàn)代軟件開(kāi)發(fā)中,與Web服務(wù)進(jìn)行交互已經(jīng)成為一種常見(jiàn)的需求。無(wú)論是構(gòu)建API、爬蟲(chóng)還是自動(dòng)化測(cè)試,都需要向服務(wù)器發(fā)送HTTP請(qǐng)求并處理響應(yīng)。Python作為一種功能強(qiáng)大且易于學(xué)習(xí)的編程語(yǔ)言,提供了許多用于處理HTTP請(qǐng)求的庫(kù)。其中,Requests庫(kù)是最受歡迎的選擇之一。本文將介紹Requests庫(kù)的基本用法和一些高級(jí)特性,幫助讀者更好地理解和利用這個(gè)強(qiáng)大的工具。
- Requests庫(kù)簡(jiǎn)介
Requests庫(kù)是一個(gè)簡(jiǎn)潔而優(yōu)雅的Python HTTP庫(kù),它的目標(biāo)是使HTTP請(qǐng)求變得簡(jiǎn)單易用。通過(guò)Requests庫(kù),我們可以方便地向服務(wù)器發(fā)送GET、POST、PUT、DELETE等不同類(lèi)型的HTTP請(qǐng)求,并處理服務(wù)器返回的響應(yīng)數(shù)據(jù)。Requests庫(kù)的設(shè)計(jì)哲學(xué)是“人類(lèi)可讀”和“友好”,使得開(kāi)發(fā)者可以更加專(zhuān)注于業(yè)務(wù)邏輯的實(shí)現(xiàn),而不需要花費(fèi)大量時(shí)間處理底層的網(wǎng)絡(luò)細(xì)節(jié)。
- 安裝Requests庫(kù)
要使用Requests庫(kù),首先需要將其安裝到Python環(huán)境中??梢酝ㄟ^(guò)以下命令使用pip工具安裝Requests庫(kù):
pip install requests
安裝完成后,可以在Python代碼中通過(guò)import requests
語(yǔ)句導(dǎo)入Requests庫(kù)。
以下是一些常用的Requests方法及其功能:
1. `r.status_code`:獲取響應(yīng)狀態(tài)碼,如200表示成功,404表示未找到等。
2. `r.content`:以字節(jié)方式獲取響應(yīng)體,會(huì)自動(dòng)解碼gzip和deflate壓縮。
3. `r.headers`:以字典對(duì)象存儲(chǔ)服務(wù)器響應(yīng)頭,若鍵不存在則返回None。
4. `r.json()`:Requests中內(nèi)置的JSON解析方法,將響應(yīng)體解析為Python字典或列表。
5. `r.url`:獲取請(qǐng)求的URL。
6. `r.encoding`:獲取響應(yīng)的編碼格式。
7. `r.cookies`:獲取響應(yīng)中的cookie。
8. `r.raw`:返回原始響應(yīng)體。
9. `r.text`:以字符串方式獲取響應(yīng)體,會(huì)自動(dòng)根據(jù)響應(yīng)頭部的字符編碼進(jìn)行解碼。
10. `r.raise_for_status()`:如果請(qǐng)求失敗(非200響應(yīng)),則拋出異常。
使用Requests庫(kù)的基本步驟如下:
1. 導(dǎo)入requests庫(kù):`import requests`
2. 發(fā)送請(qǐng)求:`r = requests.get(url)` 或 `r = requests.post(url, data=data)` 等。
3. 獲取響應(yīng)狀態(tài)碼:`r.status_code`
4. 獲取響應(yīng)內(nèi)容:`r.content` 或 `r.text`
5. 獲取響應(yīng)頭:`r.headers`
6. 解析響應(yīng)體為JSON:`r.json()`
7. 獲取請(qǐng)求的URL:`r.url`
8. 獲取響應(yīng)的編碼格式:`r.encoding`
9. 獲取響應(yīng)中的cookie:`r.cookies`
10. 獲取原始響應(yīng)體:`r.raw`
11. 如果請(qǐng)求失敗,拋出異常:`r.raise_for_status()`
- 發(fā)送GET請(qǐng)求
GET請(qǐng)求是最常見(jiàn)的HTTP請(qǐng)求類(lèi)型,用于從服務(wù)器獲取資源。使用Requests庫(kù)發(fā)送GET請(qǐng)求非常簡(jiǎn)單,只需要調(diào)用requests.get()
函數(shù)并傳入U(xiǎn)RL參數(shù)即可。以下是一個(gè)簡(jiǎn)單的示例:
import requests url = 'https://www.baidu.com' response = requests.get(url) print(response.text)
在這個(gè)示例中,我們向https://www.baidu.com
發(fā)送了一個(gè)GET請(qǐng)求,并將響應(yīng)內(nèi)容打印出來(lái)。需要注意的是,response.text
屬性包含了服務(wù)器返回的原始文本數(shù)據(jù),如果響應(yīng)內(nèi)容是JSON格式,可以使用response.json()
方法將其解析為Python對(duì)象。
- 發(fā)送POST請(qǐng)求
POST請(qǐng)求用于向服務(wù)器提交數(shù)據(jù),通常用于創(chuàng)建新資源或更新現(xiàn)有資源。使用Requests庫(kù)發(fā)送POST請(qǐng)求也非常簡(jiǎn)單,只需要調(diào)用requests.post()
函數(shù)并傳入U(xiǎn)RL和數(shù)據(jù)參數(shù)即可。以下是一個(gè)簡(jiǎn)單的示例:
import requests data = {'wd': 'Python'} response = requests.post('https://www.baidu.com/s', data=data) print(response.text)
在這個(gè)示例中,我們向https://www.baidu.com/s
發(fā)送了一個(gè)POST請(qǐng)求,并將數(shù)據(jù)以字典的形式傳遞給data
參數(shù)。需要注意的是,POST請(qǐng)求的數(shù)據(jù)通常以表單形式或JSON格式提交,可以通過(guò)設(shè)置headers
參數(shù)來(lái)指定數(shù)據(jù)的格式。例如,如果要以JSON格式提交數(shù)據(jù),可以設(shè)置headers
為{'Content-Type': 'application/json'}
。
- 處理響應(yīng)狀態(tài)碼和異常
在發(fā)送HTTP請(qǐng)求時(shí),我們需要關(guān)注服務(wù)器返回的狀態(tài)碼,以便了解請(qǐng)求是否成功以及如何處理錯(cuò)誤情況。Requests庫(kù)提供了一些方便的方法來(lái)處理響應(yīng)狀態(tài)碼和異常。以下是一些常用的方法:
response.status_code
:獲取響應(yīng)的狀態(tài)碼。例如,如果狀態(tài)碼為200,表示請(qǐng)求成功;如果狀態(tài)碼為404,表示找不到資源。response.raise_for_status()
:如果響應(yīng)的狀態(tài)碼表示錯(cuò)誤(非2xx),則拋出異常。這可以幫助我們及時(shí)發(fā)現(xiàn)并處理錯(cuò)誤情況。例如:
response = requests.get('https://www.baidu.com') response.raise_for_status() # 如果狀態(tài)碼不是2xx,拋出異常
- 設(shè)置請(qǐng)求頭和Cookies
有時(shí)候,我們需要在HTTP請(qǐng)求中設(shè)置特定的請(qǐng)求頭或Cookies。Requests庫(kù)提供了一些方法來(lái)實(shí)現(xiàn)這一功能。以下是一些常用的方法:
requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})
:在GET請(qǐng)求中設(shè)置請(qǐng)求頭。例如,我們可以設(shè)置User-Agent來(lái)模擬不同的瀏覽器或設(shè)備。requests.get(url, cookies={'session': '123456789'})
:在GET請(qǐng)求中設(shè)置Cookies。例如,我們可以使用會(huì)話ID來(lái)保持用戶(hù)登錄狀態(tài)。requests.post(url, data=data, headers={'Content-Type': 'application/json'}, cookies={'session': '123456789'})
:在POST請(qǐng)求中設(shè)置請(qǐng)求頭和Cookies。例如,我們可以同時(shí)設(shè)置數(shù)據(jù)格式和會(huì)話ID。
- 超時(shí)和重試機(jī)制
在發(fā)送HTTP請(qǐng)求時(shí),可能會(huì)遇到網(wǎng)絡(luò)延遲、服務(wù)器故障等問(wèn)題導(dǎo)致請(qǐng)求失敗。為了提高程序的健壯性,我們可以使用Requests庫(kù)提供的超時(shí)和重試機(jī)制。以下是一些常用的方法:
requests.get(url, timeout=5)
:設(shè)置GET請(qǐng)求的超時(shí)時(shí)間為5秒。如果超過(guò)5秒還沒(méi)有收到響應(yīng),將拋出異常。requests.Session().mount('http://', requests_retry.Retry())
:使用重試機(jī)制來(lái)處理HTTP請(qǐng)求。例如,我們可以使用requests_retry
庫(kù)來(lái)實(shí)現(xiàn)自動(dòng)重試功能。具體使用方法可以參考該庫(kù)的文檔。
- 其他高級(jí)特性
除了上述基本用法外,Requests庫(kù)還提供了許多其他高級(jí)特性,如代理、身份驗(yàn)證、文件上傳等。這些特性可以幫助我們更靈活地處理各種HTTP場(chǎng)景。以下是一些常用的高級(jí)特性:
requests.get(url, proxies={'http': 'http://user:password@proxy:port', 'https': 'https://user:password@proxy:port'})
:使用代理服務(wù)器發(fā)送HTTP請(qǐng)求。例如,我們可以使用代理服務(wù)器來(lái)繞過(guò)網(wǎng)絡(luò)限制或提高訪問(wèn)速度。
- 封裝requests公共方法
import requests class Request: def requests_api(self, url, data=None, json=None, headers=None, cookies=None, method="get"): if method == "get": r = requests.get(url, data=data, json=json, headers=headers, cookies=cookies) elif method == "post": r = requests.post(url, data=data, json=json, headers=headers, cookies=cookies) code = r.status_code try: body = r.json() except Exception as e: body = r.text res = dict() res["code"] = code res["body"] = body return res def get(self, url, **kwargs): return self.requests_api(url, method="get", **kwargs) def post(self, url, **kwargs): return self.requests_api(url, method="post", **kwargs)
- 這個(gè)類(lèi)的作用是封裝了requests庫(kù)中的get和post方法,使得發(fā)送HTTP請(qǐng)求更加方便。通過(guò)調(diào)用get或post方法,可以向指定的URL發(fā)送GET或POST請(qǐng)求,并獲取響應(yīng)的狀態(tài)碼和內(nèi)容。
- 在requests_api方法中,根據(jù)傳入的method參數(shù)選擇使用requests.get或requests.post方法發(fā)送請(qǐng)求。然后,將響應(yīng)的狀態(tài)碼存儲(chǔ)在變量code中,嘗試將響應(yīng)的內(nèi)容解析為JSON格式,如果解析失敗則使用原始文本作為響應(yīng)內(nèi)容。最后,將狀態(tài)碼和響應(yīng)內(nèi)容存儲(chǔ)在一個(gè)字典中,并返回該字典作為結(jié)果。
- 另外,get和post方法都是通過(guò)調(diào)用requests_api方法來(lái)實(shí)現(xiàn)的,它們分別傳入不同的HTTP方法參數(shù)(“get"或"post”),并將其他參數(shù)傳遞給requests_api方法。這樣,用戶(hù)可以通過(guò)調(diào)用這兩個(gè)方法來(lái)發(fā)送不同類(lèi)型的HTTP請(qǐng)求。
到此這篇關(guān)于Python中的HTTP請(qǐng)求庫(kù)Requests的具體使用的文章就介紹到這了,更多相關(guān)Python Requests內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python標(biāo)準(zhǔn)庫(kù)random模塊處理隨機(jī)數(shù)
這篇文章主要介紹了python標(biāo)準(zhǔn)庫(kù)random模塊處理隨機(jī)數(shù),random模塊實(shí)現(xiàn)了各種分布的偽隨機(jī)數(shù)生成器,具體介紹感興趣的小伙伴可以參考一下2022-09-09CentOS系統(tǒng)上安裝Conda的詳細(xì)指南
Conda 是一個(gè)開(kāi)源的包管理系統(tǒng)和環(huán)境管理系統(tǒng),廣泛應(yīng)用于數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)領(lǐng)域,本文將詳細(xì)介紹如何在 CentOS 系統(tǒng)上安裝 Conda吧2025-03-03Python:__eq__和__str__函數(shù)的使用示例
這篇文章主要介紹了Python:__eq__和__str__函數(shù)的使用示例,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-09-09python+requests+pytest接口自動(dòng)化的實(shí)現(xiàn)示例
這篇文章主要介紹了python+requests+pytest接口自動(dòng)化的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04TensorFlow實(shí)現(xiàn)AutoEncoder自編碼器
這篇文章主要為大家詳細(xì)介紹了TensorFlow實(shí)現(xiàn)AutoEncoder自編碼器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03CPython 垃圾收集器檢測(cè)循環(huán)引用詳解
這篇文章主要為大家介紹了CPython 垃圾收集器檢測(cè)循環(huán)引用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Python?Tkinter庫(kù)從入門(mén)到進(jìn)階使用教程
Tkinter是Python標(biāo)準(zhǔn)庫(kù)中內(nèi)置的圖形用戶(hù)界面(GUI)工具包,提供了創(chuàng)建窗口、按鈕、文本框等GUI元素的功能,本文將介紹Tkinter的基礎(chǔ)知識(shí),幫助大家快速入門(mén)2023-12-12