合肥快速做網(wǎng)站百度推廣登錄官網(wǎng)
文章目錄
- 安裝
- 基本用法
- 測(cè)試網(wǎng)站
- 發(fā)送GET請(qǐng)求
- 發(fā)送POST請(qǐng)求
- 更多請(qǐng)求
- 請(qǐng)求參數(shù)
- 請(qǐng)求頭
- 其他常用請(qǐng)求屬性
- 處理響應(yīng)
- 響應(yīng)狀態(tài)碼
- 響應(yīng)內(nèi)容
- 處理超時(shí)
- 處理異常
requests 是一個(gè)非常流行的 Python HTTP 庫(kù),用于發(fā)送所有類型的 HTTP 請(qǐng)求。它簡(jiǎn)潔易用,能夠處理復(fù)雜的請(qǐng)求場(chǎng)景,如保持會(huì)話、處理 cookies、上傳文件等。本篇只對(duì)GET和POST做簡(jiǎn)單說(shuō)明,其他請(qǐng)求類似。
安裝
要在 Python 中使用 requests 庫(kù),首先需要安裝它??梢允褂靡韵轮噶钸M(jìn)行安裝:
pip install requests
如果遇到網(wǎng)絡(luò)環(huán)境導(dǎo)致下載失敗,可以使用國(guó)內(nèi)第三方鏡像站進(jìn)行安裝,這里使用的是阿里云鏡像:
pip install requests -i https://mirrors.aliyun.com/pypi/simple
基本用法
測(cè)試網(wǎng)站
在接下來(lái)的代碼示例中,會(huì)使用到 httpbin.org 工具。httpbin.org 是一個(gè)專門(mén)用于測(cè)試 HTTP 請(qǐng)求的服務(wù)網(wǎng)站。這個(gè)網(wǎng)站由 Kenneth Reitz 創(chuàng)建,目的是為開(kāi)發(fā)者提供一個(gè)簡(jiǎn)單的工具來(lái)測(cè)試和調(diào)試各種 HTTP 請(qǐng)求。你可以使用它來(lái)發(fā)送各種類型的 HTTP 請(qǐng)求(如 GET、POST、PUT、DELETE 等),并查看服務(wù)器返回的內(nèi)容。
以下是 httpbin.org 提供的一些常見(jiàn)測(cè)試端點(diǎn):
- /get:用于測(cè)試 GET 請(qǐng)求。它會(huì)返回你發(fā)送的查詢參數(shù)、請(qǐng)求頭等信息。
- /post:用于測(cè)試 POST 請(qǐng)求。你可以發(fā)送表單數(shù)據(jù)或 JSON 數(shù)據(jù),并查看服務(wù)器返回的數(shù)據(jù)。
- /status/:code:用于測(cè)試不同的 HTTP 狀態(tài)碼。例如,/status/404 會(huì)返回一個(gè) 404 狀態(tài)碼。
- /redirect/:n:用于測(cè)試重定向。/redirect/3 會(huì)重定向 3 次。
- /cookies 和 /cookies/set:用于測(cè)試 cookie 的處理。
- /delay/:seconds:用于測(cè)試請(qǐng)求延遲。它會(huì)延遲指定的秒數(shù)后再響應(yīng)。
- /basic-auth/:user/:passwd:用于測(cè)試基本 HTTP 身份驗(yàn)證。
當(dāng)你在開(kāi)發(fā)過(guò)程中需要測(cè)試各種 HTTP 行為時(shí)。例如,你可以使用它來(lái)驗(yàn)證你的客戶端是否正確處理重定向、身份驗(yàn)證、請(qǐng)求頭、響應(yīng)格式等。
發(fā)送GET請(qǐng)求
GET 請(qǐng)求用于從服務(wù)器獲取數(shù)據(jù)。最簡(jiǎn)單的形式如下:
import requestsresponse = requests.get('http://httpbin.org/get')
print(response.status_code) # 輸出狀態(tài)碼,例如 200
print(response.text) # 輸出響應(yīng)內(nèi)容
發(fā)送POST請(qǐng)求
POST 請(qǐng)求通常用于提交數(shù)據(jù)到服務(wù)器,例如提交表單數(shù)據(jù)。
import requestspayload = {'key1': 'value1', 'key2': 'value2'}
res = requests.post(url="http://httpbin.org/post",data=payload)
print(res.json())
更多請(qǐng)求
requests.get(url, params=None, **kwargs)
: 發(fā)送一個(gè)HTTP GET請(qǐng)求,并返回一個(gè)Response對(duì)象。可以使用params參數(shù)傳遞查詢參數(shù),也可以使用**kwargs參數(shù)傳遞其他的請(qǐng)求參數(shù),如headers、timeout等。requests.post(url, data=None, json=None, **kwargs)
: 發(fā)送一個(gè)HTTP POST請(qǐng)求,并返回一個(gè)Response對(duì)象??梢允褂胐ata參數(shù)傳遞表單數(shù)據(jù),也可以使用json參數(shù)傳遞JSON數(shù)據(jù),還可以使用**kwargs參數(shù)傳遞其他的請(qǐng)求參數(shù),如headers、timeout等。requests.put(url, data=None, **kwargs)
: 發(fā)送一個(gè)HTTP PUT請(qǐng)求,并返回一個(gè)Response對(duì)象??梢允褂胐ata參數(shù)傳遞請(qǐng)求數(shù)據(jù),也可以使用**kwargs參數(shù)傳遞其他的請(qǐng)求參數(shù),如headers、timeout等。requests.delete(url, **kwargs)
: 發(fā)送一個(gè)HTTP DELETE請(qǐng)求,并返回一個(gè)Response對(duì)象??梢允褂?*kwargs參數(shù)傳遞請(qǐng)求參數(shù),如headers、timeout等。requests.head(url, **kwargs)
: 發(fā)送一個(gè)HTTP HEAD請(qǐng)求,并返回一個(gè)Response對(duì)象??梢允褂?*kwargs參數(shù)傳遞請(qǐng)求參數(shù),如headers、timeout等。requests.options(url, **kwargs)
: 發(fā)送一個(gè)HTTP OPTIONS請(qǐng)求,并返回一個(gè)Response對(duì)象??梢允褂?*kwargs參數(shù)傳遞請(qǐng)求參數(shù),如headers、timeout等。requests.exceptions
: requests庫(kù)的異常類,如Timeout、ConnectionError等,可以用于捕獲請(qǐng)求過(guò)程中可能出現(xiàn)的異常情況。
請(qǐng)求參數(shù)
可以通過(guò) params 參數(shù)將查詢參數(shù)添加到 URL 中,params 用于添加 URL 查詢參數(shù)。這些參數(shù)會(huì)附加在 URL 后面,格式為 key=value,多個(gè)參數(shù)之間用 & 分隔。
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get(url, params=params)
發(fā)送的實(shí)際請(qǐng)求 URL 會(huì)是:
https://api.example.com/data?key1=value1&key2=value2
請(qǐng)求頭
自定義請(qǐng)求頭可以通過(guò) headers 參數(shù)傳遞。用于設(shè)置 HTTP 請(qǐng)求頭。它用來(lái)傳遞額外的信息給服務(wù)器。可以把它想象成你寫(xiě)信時(shí)附上的說(shuō)明,比如告訴收信人你是誰(shuí)、信的內(nèi)容類型等。
import requestsheaders = {'User-Agent': 'my-app/0.0.1'}
response = requests.get('https://httpbin.org/get', headers=headers)
print(response.text)
其他常用請(qǐng)求屬性
-
timeout :用于設(shè)置請(qǐng)求的超時(shí)時(shí)間,單位是秒。如果請(qǐng)求超過(guò)指定時(shí)間未完成,會(huì)拋出
requests.exceptions.Timeout
異常。 -
auth:用于處理 HTTP 身份驗(yàn)證。比如,當(dāng)你訪問(wèn)某個(gè)網(wǎng)頁(yè)時(shí),可能會(huì)彈出一個(gè)窗口要求輸入用戶名和密碼,這就是一種基本的 HTTP 身份驗(yàn)證。假設(shè)你要訪問(wèn)一個(gè)需要登錄的 API 或網(wǎng)頁(yè),你需要提供正確的用戶名和密碼,服務(wù)器才會(huì)允許你訪問(wèn)。
from requests.auth import HTTPBasicAuth response = requests.get(url, auth=HTTPBasicAuth('user', 'pass'))
HTTPBasicAuth 是處理基本身份驗(yàn)證的簡(jiǎn)單方法,特別適合用來(lái)訪問(wèn)那些需要用戶名和密碼的簡(jiǎn)單 API 或網(wǎng)頁(yè)。
-
cookies:用于發(fā)送 HTTP cookies,可以是一個(gè)字典。是服務(wù)器與客戶端之間交換的小型數(shù)據(jù),用于記住用戶的信息和狀態(tài)。
處理響應(yīng)
請(qǐng)求會(huì)返回一個(gè) Response 對(duì)象,該對(duì)象包含了服務(wù)器返回的數(shù)據(jù)和狀態(tài)信息。
響應(yīng)狀態(tài)碼
status_code
屬性用于獲取 HTTP 響應(yīng)狀態(tài)碼,如 200(成功)、404(未找到)、500(服務(wù)器錯(cuò)誤)等:
if response.status_code == 200:print('Success!')
elif response.status_code == 404:print('Not Found.')
響應(yīng)內(nèi)容
requests 提供了多種方式獲取響應(yīng)內(nèi)容:
- text:返回響應(yīng)內(nèi)容的字符串形式。它自動(dòng)將響應(yīng)的字節(jié)數(shù)據(jù)解碼為 Unicode 字符串,使用的是 HTTP 響應(yīng)頭中指定的字符編碼(通常是 UTF-8)。
- content:返回響應(yīng)內(nèi)容的二進(jìn)制形式。不進(jìn)行任何解碼。這對(duì)于處理非文本內(nèi)容(如圖片、音頻文件、視頻文件、壓縮包等)非常有用。適用于處理二進(jìn)制文件,如圖片、音頻文件、PDF 文檔等。
- json():如果響應(yīng)內(nèi)容是 JSON 格式,可以使用此方法將其解析為 Python 字典。
- url:返回請(qǐng)求的最終 URL(包括重定向后的 URL)
- headers:返回一個(gè)包含響應(yīng)頭的字典。
- cookies:返回服務(wù)器在響應(yīng)中設(shè)置的 cookies。
處理超時(shí)
可以通過(guò) timeout 參數(shù)設(shè)置請(qǐng)求的超時(shí)時(shí)間(單位為秒)。如果請(qǐng)求超時(shí),會(huì)拋出 requests.exceptions.Timeout
異常。
try:response = requests.get('https://httpbin.org/delay/10', timeout=2)
except requests.exceptions.Timeout:print('The request timed out')
處理異常
當(dāng)使用requests庫(kù)發(fā)送HTTP請(qǐng)求時(shí),有可能會(huì)發(fā)生異常情況,例如網(wǎng)絡(luò)錯(cuò)誤、連接超時(shí)等。為了處理這些異常情況,我們可以使用Python的異常處理機(jī)制。requests庫(kù)中定義了多種異常類型,可以用來(lái)捕獲和處理各種HTTP請(qǐng)求相關(guān)的異常情況。
在使用requests庫(kù)時(shí),我們應(yīng)該始終使用try-except語(yǔ)句來(lái)捕獲和處理可能發(fā)生的異常。以下是一些常見(jiàn)的異常類型:
- requests.exceptions.RequestException: 所有異常的基類,可以用來(lái)捕獲所有的異常情況。
- requests.exceptions.Timeout: 當(dāng)請(qǐng)求超時(shí)時(shí),拋出此異常。
- requests.exceptions.Timeout: 當(dāng)請(qǐng)求超時(shí)時(shí),拋出此異常。
- requests.exceptions.HTTPError: 當(dāng)HTTP請(qǐng)求返回錯(cuò)誤狀態(tài)碼時(shí),拋出此異常。
以下是一個(gè)例子,演示如何使用try-except語(yǔ)句來(lái)捕獲請(qǐng)求可能出現(xiàn)的異常情況:
import requeststry:r = requests.get('https://www.baidu.com/', timeout=3)r.raise_for_status()
except requests.exceptions.Timeout as e:print('請(qǐng)求超時(shí):', e)
except requests.exceptions.ConnectionError as e:print('連接錯(cuò)誤:', e)
except requests.exceptions.HTTPError as e:print('HTTP錯(cuò)誤:', e)
except requests.exceptions.RequestException as e:print('其他異常:', e)
在上述代碼中,我們首先使用try語(yǔ)句來(lái)執(zhí)行requests.get()方法,如果發(fā)生異常,則會(huì)跳轉(zhuǎn)到相應(yīng)的except塊進(jìn)行處理。如果請(qǐng)求超時(shí)、連接錯(cuò)誤或者HTTP錯(cuò)誤,將會(huì)拋出相應(yīng)的異常,并且打印相應(yīng)的錯(cuò)誤信息。如果發(fā)生其他異常情況,則會(huì)拋出requests.exceptions.RequestException異常,并打印相應(yīng)的錯(cuò)誤信息。
通過(guò)使用異常處理機(jī)制,我們可以有效地處理請(qǐng)求中可能出現(xiàn)的各種異常情況,以確保我們的程序能夠在不穩(wěn)定的網(wǎng)絡(luò)環(huán)境中穩(wěn)定地運(yùn)行。