# Python使用requests模塊與Web應用進行交互
## 引言
在現代Web開發中,與API或Web服務進行交互是常見需求。Python的`requests`模塊以其簡潔優雅的API成為HTTP客戶端庫的事實標準。本文將詳細介紹如何使用`requests`模塊完成GET/POST請求、處理響應、管理會話以及應對常見場景。
## 一、安裝與基礎使用
### 1.1 安裝requests
```bash
pip install requests
import requests
response = requests.get('https://api.example.com/data')
print(response.status_code) # 200
print(response.text) # 響應內容
# URL參數
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://api.example.com', params=params)
# 實際請求URL變為:
# https://api.example.com?key1=value1&key2=value2
# 表單數據
data = {'username': 'admin', 'password': 'secret'}
response = requests.post('https://api.example.com/login', data=data)
# JSON數據
json_data = {'name': 'Alice', 'age': 25}
response = requests.post('https://api.example.com/users', json=json_data)
response = requests.get('https://api.example.com/data')
# 響應內容
print(response.text) # 文本格式
print(response.json()) # 自動解析JSON
# 響應頭
print(response.headers)
print(response.headers['Content-Type'])
# 狀態碼檢查
response.raise_for_status() # 非200狀態碼拋出異常
# 創建會話保持cookies
session = requests.Session()
session.get('https://api.example.com/login', params={'user': 'test'})
response = session.get('https://api.example.com/dashboard')
# 連接超時3秒,讀取超時5秒
requests.get('https://api.example.com', timeout=(3, 5))
files = {'file': open('report.xls', 'rb')}
response = requests.post('https://api.example.com/upload', files=files)
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080',
}
requests.get('https://api.example.com', proxies=proxies)
from requests.auth import HTTPBasicAuth
response = requests.get(
'https://api.example.com',
auth=HTTPBasicAuth('username', 'password')
)
headers = {'Authorization': 'Bearer YOUR_TOKEN'}
response = requests.get('https://api.example.com/protected', headers=headers)
# 禁用驗證(不推薦生產環境使用)
requests.get('https://api.example.com', verify=False)
# 自定義CA證書
requests.get('https://api.example.com', verify='/path/to/cert.pem')
try:
response = requests.get('https://api.example.com', timeout=5)
response.raise_for_status()
except requests.exceptions.Timeout:
print("請求超時")
except requests.exceptions.HTTPError as err:
print(f"HTTP錯誤: {err}")
except requests.exceptions.RequestException as err:
print(f"請求異常: {err}")
# 啟用調試日志
import logging
import http.client
http.client.HTTPConnection.debuglevel = 1
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
# requests默認保持連接池
session = requests.Session()
for _ in range(10):
session.get('https://api.example.com') # 復用TCP連接
# 處理大文件時避免內存溢出
response = requests.get('https://example.com/large-file', stream=True)
with open('large_file', 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
def get_user(user_id):
response = requests.get(f'https://api.example.com/users/{user_id}')
return response.json()
def create_user(user_data):
response = requests.post(
'https://api.example.com/users',
json=user_data,
headers={'Content-Type': 'application/json'}
)
return response.json()
response = requests.get('https://example.com')
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
print(soup.title.string)
requests模塊通過簡潔的API實現了強大的HTTP客戶端功能。掌握本文介紹的技術要點后,您已經能夠處理大多數Web交互場景。對于更復雜的需求,可以考慮結合aiohttp實現異步請求,或使用requests-cache等擴展庫實現緩存功能。
最佳實踐提示: 1. 總是檢查響應狀態碼 2. 為生產環境配置合理的超時時間 3. 敏感信息不要硬編碼在代碼中 4. 考慮使用retry機制處理臨時性失敗 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。