什么是Python中的Requests模塊?
requests模塊是Python中廣泛使用的庫,用于簡化HTTP請求的發送和響應處理。無論是調用API、下載文件、處理復雜會話管理,requests都能提供很好的解決方案。
一、基礎使用方法
1.GET請求
GET請求用于獲取服務器資源,如:獲取商品列表。我們就可以通過傳遞查詢參數在URL中,服務器根據你傳的參數返回特定的數據。
import requestsurl = 'http://127.0.0.1:8787/products'
params = {'category':'electronics'}response = requests.get(url,params=params)#輸出返回的JSON數據
print(response.json())
2.POST請求
接口測試中,POST請求經常用于發送數據。假設我們測試一個登錄接口,需要在報文body處傳遞用戶名和密碼作為請求參數。
ipmort requests#設置請求的URL和參數
url = 'http://127.0.0.1:8787/login'
headers = {'Content-Type':'application/x-www-form-urlencoded'}
data = {'username':'testname','password','testpass'}#發起POST請求
response = requests.post(url,headers=headers,data=data)#查看響應狀態碼和內容
print(response.status_code) #200,就表示請求成功
print(response.text) #返回服務器響應的文本內容
3.GET和POST請求的區別
在實際的項目中,選擇POST還是GET取決于數據傳遞的需求:
GET請求:獲取服務器的資源,安全且冪等,參數通過URL傳遞。
POST請求:提交或修改服務器的資源,不安全且不冪等,參數通過報文Body傳遞。
注意:這里的安全不是指的數據傳遞時是否容易被竊取,而是能否修改服務器資源。
二、數據傳遞格式
1.表單提交與JSON數據
POST請求的數據傳輸方式主要有兩種:表單數據和JSON數據
表單提交:
data = {'username':'testuser','password':'testpass'}
response = requests.post(url,data=data)
JSON提交:
json_data = {'username':'testuser','password':'testpass'}
response = requests.post(url,json=json_data)
看起來沒什么區別,但是不同的接口通常有特定的數據格式要求,測試時需要根據接口文檔確定數據的傳輸格式。
三、會話管理與持久性連接
在一些需要多次請求的場景下,使用會話對象Session可以管理持久性連接,避免重復登錄的操作。尤其是設計用戶登錄、會話保持的場景,Session的使用至關重要。
#創建會話對象
session = requests.Session()#使用會話對象進行登錄
login_url = 'http://127.0.0.1:8787/login'
session.post(login_url,data={'username':'testname','password':'testpass'})#登錄后保護受保護的資源
protected_url = 'http://127.0.0.1:8787/protected'
response = session.get(protected_url)print(response.text)
四、處理響應結果
在自動化測試中,我們不僅要關心接口的響應狀態碼,還需要處理接口返回的數據格式。requests支持多種返回格式.
文本類型:
print(response.text)
JSON類型:
print(response.json())
二進制內容:
print(response.content) #獲取二進制內容,如圖片或文件
注意:如果遇到編碼問題,可以通過response.encoding或手動解碼方式來處理
五、應對HTTPS證書驗證
在測試HTTPS接口時,可能會遇到證書驗證的錯誤,尤其是在開發環境下。可以通過以下方式禁用證書驗證。
response = requests.get(url,verify=False)
六、錯誤處理與異常捕獲
requests提供了強大的異常處理機制,在測試過程中可以捕獲網絡錯誤或超時問題
try:response = requests.get(url,timeout=5)response.raise_for_status()
except requests.exceptions.HTTPError as heep_err:print(f'HTTP error occurred:{http_err}')
except requests.exceptions.RequestException as err:print(f'Other error occurred:{err}')
參考文檔:Requests: HTTP for Humans? — Requests 2.32.3 documentation