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