概述
在上一節(jié)猛拴,我們介紹了Python的logging模塊,包括:logging的基本使用香缺、logging的選項設(shè)置、日志旋轉(zhuǎn)歇僧、logging.Filter類等內(nèi)容图张。在這一節(jié),我們將介紹Python的requests模塊诈悍。requests模塊是Python中最常用的HTTP客戶端庫之一祸轮,因為它簡單易用,功能強大写隶,并可以發(fā)送各種類型的HTTP請求倔撞,包括:POST、GET慕趴、PUT等。requests模塊不是Python的標(biāo)準(zhǔn)庫鄙陡,我們可以通過pip包管理器進行安裝冕房。
發(fā)送POST請求
使用requests.post()函數(shù)可以發(fā)送HTTP POST請求,并返回一個Response對象趁矾。該對象包含響應(yīng)的各種信息耙册,比如:狀態(tài)碼、響應(yīng)頭毫捣、響應(yīng)體等详拙。requests.post()函數(shù)可以通過data參數(shù)傳遞要發(fā)送的數(shù)據(jù),通過timeout參數(shù)傳遞超時的時間蔓同。
import requests
# 要發(fā)送的自定義數(shù)據(jù)
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://www.baidu.com', data = data, timeout = 2)
# 檢查響的應(yīng)狀態(tài)碼
if response.status_code == 200:
print('success')
print(response.text)
else:
print('failed, status code is:', response.status_code)
如果想發(fā)送Json格式的請求體饶辙,可以使用json參數(shù)代替data參數(shù),requests模塊會自動將Python對象轉(zhuǎn)換為Json格式斑粱。
import requests
json_data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://www.test.com/api/test', json = json_data)
發(fā)送GET請求
使用requests.get()函數(shù)可以發(fā)送HTTP GET請求弃揽,并返回一個Response對象。
import requests
response = requests.get('https://www.baidu.com/')
# 輸出狀態(tài)碼
print(response.status_code)
# 輸出響應(yīng)頭
print(response.headers)
# 輸出響應(yīng)體的文本內(nèi)容
print(response.text)
在GET請求中,參數(shù)通常作為查詢字符串附加在URL的末尾矿微。而在POST請求中痕慢,參數(shù)通常作為請求體發(fā)送。因此涌矢,在使用requests.post()函數(shù)時掖举,我們通過data參數(shù)傳遞要發(fā)送的數(shù)據(jù)。而在使用requests.get()函數(shù)時娜庇,我們通過params參數(shù)傳遞查詢參數(shù)塔次。
import requests
# 可以替換為目標(biāo)URL
url = 'https://www.test.com/api/test'
# 要傳遞的查詢參數(shù)
params = {'key': 'value'}
response = requests.get(url, params = params, timeout = 2)
# 檢查響應(yīng)的狀態(tài)碼
if response.status_code == 200:
print('success')
print(response.text)
else:
print('failed, status code is:', response.status_code)
設(shè)置請求頭
在requests.post()函數(shù)和requests.get()函數(shù)中,可以通過headers參數(shù)設(shè)置自定義的請求頭思灌。請求頭是一種HTTP消息頭俺叭,用于傳遞關(guān)于請求的附加信息,比如:User-Agent泰偿、Content-Type等熄守。設(shè)置請求頭可以幫助我們模擬不同的瀏覽器和客戶端,或滿足某些API的特殊要求耗跛。
import requests
url = 'https://www.test.com/api/test'
headers = {
'User-Agent': 'Mozilla/5.0',
'Content-Type': 'application/json'
}
response = requests.get(url, headers = headers)
會話管理
我們可以使用requests.Session()創(chuàng)建一個會話對象裕照,以進行會話管理。通過會話管理调塌,可以在同一會話中發(fā)送多個請求晋南,并共享同一份cookies、請求頭等信息羔砾。
import requests
# 創(chuàng)建會話對象
session = requests.Session()
# 發(fā)送第一個請求
url1 = 'https://www.test.com/api/test1'
response1 = session.get(url1)
# 發(fā)送第二個請求
url2 = 'https://www.test.com/api/test2'
response2 = session.post(url2, data = {'name': 'Hope'})
# 關(guān)閉會話
session.close()
在上面的示例代碼中负间,首先使用requests.Session()創(chuàng)建了一個會話對象session。然后姜凄,使用session.get()函數(shù)發(fā)送第一個GET請求到url1政溃,并使用session.post()函數(shù)發(fā)送第二個POST請求到url2。由于這些請求都是在同一個會話中發(fā)送的态秧,所以它們會共享同一份cookies和請求頭等信息董虱。最后,我們調(diào)用了session.close()函數(shù)來關(guān)閉會話申鱼。這一步是可選的愤诱,因為在Python結(jié)束時,會話對象會自動關(guān)閉捐友。但如果想在程序中間關(guān)閉會話淫半,可以使用session.close()函數(shù)來實現(xiàn)。