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