
如何快速實現REST API集成以優化業務流程
小貼士: response對象包含了服務器響應的所有信息,不僅有內容,還有狀態碼、響應頭等重要信息。
看看如何優雅地處理URL參數:
import requests
# 使用params參數傳遞查詢參數
params = {
'q': 'python',
'sort': 'stars',
'order': 'desc'
}
response = requests.get(
'https://api.github.com/search/repositories',
params=params
)
# 查看實際請求的URL
print(f"完整URL: {response.url}")
# 解析JSON響應
data = response.json()
print(f"查找到的倉庫數量: {data.get('total_count', 0)}")
Requests支持所有常見的HTTP方法:
import requests
# POST請求示例
data = {'username': 'python_lover', 'password': '12345'}
response = requests.post('https://httpbin.org/post', data=data)
# PUT請求示例
response = requests.put('https://httpbin.org/put', data={'key': 'value'})
# DELETE請求示例
response = requests.delete('https://httpbin.org/delete')
# 自定義請求頭
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept': 'application/json'
}
response = requests.get('https://api.github.com/user', headers=headers)
來看看如何處理文件操作:
import requests
# 上傳文件
def upload_file():
files = {
'file': ('test.txt', open('test.txt', 'rb'), 'text/plain')
}
response = requests.post('https://httpbin.org/post', files=files)
return response.json()
# 下載文件
def download_file(url, filename):
response = requests.get(url, stream=True)
if response.status_code == 200:
with open(filename, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
return True
return False
# 使用示例
# download_file('https://example.com/file.pdf', 'downloaded.pdf')
使用會話來維持連接和Cookie:
import requests
# 創建會話對象
session = requests.Session()
# 設置會話級別的請求頭
session.headers.update({
'User-Agent': 'Mozilla/5.0',
'Accept': 'application/json'
})
# 使用會話發送請求
response = session.get('https://httpbin.org/cookies/set/sessionid/123456789')
print(f"Cookie: {session.cookies.get_dict()}")
# 后續請求會自動帶上之前的Cookie
response = session.get('https://httpbin.org/cookies')
print(f"服務器看到的Cookie: {response.json()}")
優雅地處理請求中可能出現的異常:
import requests
from requests.exceptions import RequestException
def safe_request(url):
try:
response = requests.get(url, timeout=5)
response.raise_for_status() # 檢查響應狀態
return response.json()
except requests.exceptions.Timeout:
print("請求超時")
except requests.exceptions.HTTPError as e:
print(f"HTTP錯誤: {e}")
except requests.exceptions.RequestException as e:
print(f"請求出錯: {e}")
return None
# 使用示例
result = safe_request('https://api.github.com/users/invalid_user_12345')
本文章轉載微信公眾號@南南閑聊