使用Python的requests庫(kù)調(diào)用API接口的詳細(xì)步驟
使用 Python 的requests庫(kù)調(diào)用 API 接口是開發(fā)中最常用的方式之一,它簡(jiǎn)化了 HTTP 請(qǐng)求的處理流程。以下是詳細(xì)步驟和實(shí)戰(zhàn)示例,涵蓋各種常見場(chǎng)景:
一、準(zhǔn)備工作:安裝 requests 庫(kù)
如果尚未安裝,先通過 pip 安裝:
pip install requests
二、基本調(diào)用流程(以 RESTful API 為例)
1. 導(dǎo)入 requests 庫(kù)
import requests
2. 發(fā)送請(qǐng)求并獲取響應(yīng)
以調(diào)用一個(gè)獲取商品信息的 GET 接口為例:
# API地址URL
url = "https://api.example.com/products/123"
# 發(fā)送GET請(qǐng)求
response = requests.get(url)
# 查看響應(yīng)狀態(tài)碼(200表示成功)
print("狀態(tài)碼:", response.status_code)
# 查看響應(yīng)內(nèi)容(默認(rèn)是字符串格式)
print("響應(yīng)內(nèi)容:", response.text)
# 解析JSON格式的響應(yīng)(最常用)
if response.status_code == 200:
data = response.json() # 自動(dòng)解析JSON,返回字典/列表
print("商品名稱:", data["name"])
print("商品價(jià)格:", data["price"])
三、不同請(qǐng)求類型的調(diào)用方式
1. GET 請(qǐng)求(查詢數(shù)據(jù))
常用于獲取數(shù)據(jù),參數(shù)通過 URL 的查詢字符串傳遞:
url = "https://api.example.com/products"
# 請(qǐng)求參數(shù)(會(huì)自動(dòng)拼接到URL后面:?category=electronics&page=1)
params = {
"category": "electronics", # 商品分類
"page": 1 # 頁(yè)碼
}
# 發(fā)送帶參數(shù)的GET請(qǐng)求
response = requests.get(url, params=params)
# 查看最終請(qǐng)求的URL
print("請(qǐng)求URL:", response.url) # 輸出:https://api.example.com/products?category=electronics&page=1
# 解析響應(yīng)
if response.ok: # response.ok 等價(jià)于 status_code == 200
products = response.json()["data"]
for product in products:
print(product["id"], product["name"])
2. POST 請(qǐng)求(提交數(shù)據(jù))
常用于創(chuàng)建資源(如提交表單、創(chuàng)建訂單),數(shù)據(jù)放在請(qǐng)求體中:
url = "https://api.example.com/orders"
# 請(qǐng)求頭(告訴服務(wù)器數(shù)據(jù)格式為JSON)
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer your_token_here" # 認(rèn)證令牌(如有)
}
# 請(qǐng)求體數(shù)據(jù)(JSON格式)
payload = {
"product_id": 123,
"quantity": 2,
"address": "北京市朝陽(yáng)區(qū)..."
}
# 發(fā)送POST請(qǐng)求(json參數(shù)會(huì)自動(dòng)序列化并設(shè)置Content-Type為application/json)
response = requests.post(url, json=payload, headers=headers)
# 處理響應(yīng)
if response.status_code == 201: # 201表示資源創(chuàng)建成功
order = response.json()
print("創(chuàng)建訂單成功,訂單號(hào):", order["order_id"])
else:
print("創(chuàng)建失敗:", response.text)
3. PUT/PATCH 請(qǐng)求(更新數(shù)據(jù))
- PUT:全量更新資源(需提供完整數(shù)據(jù))
- PATCH:部分更新資源(僅提供需修改的字段)
# 更新商品價(jià)格(PATCH示例)
url = "https://api.example.com/products/123"
headers = {"Authorization": "Bearer your_token_here"}
payload = {"price": 3999} # 僅更新價(jià)格字段
response = requests.patch(url, json=payload, headers=headers)
if response.ok:
print("更新成功")
4. DELETE 請(qǐng)求(刪除數(shù)據(jù))
url = "https://api.example.com/products/123"
headers = {"Authorization": "Bearer your_token_here"}
response = requests.delete(url, headers=headers)
if response.status_code == 204: # 204表示刪除成功(無返回內(nèi)容)
print("刪除成功")
四、處理認(rèn)證與權(quán)限
多數(shù) API 需要身份驗(yàn)證,常見方式:
1. API Key 認(rèn)證
url = "https://api.example.com/data"
params = {
"api_key": "your_api_key_here" # 在查詢參數(shù)中攜帶API Key
}
response = requests.get(url, params=params)
2. Token 認(rèn)證(Bearer Token)
url = "https://api.example.com/data"
headers = {
"Authorization": "Bearer your_token_here" # 在請(qǐng)求頭中攜帶Token
}
response = requests.get(url, headers=headers)
3. 基礎(chǔ)認(rèn)證(Basic Auth)
url = "https://api.example.com/data"
# 傳入用戶名和密碼,requests會(huì)自動(dòng)處理編碼
response = requests.get(url, auth=("username", "password"))
五、處理異常與錯(cuò)誤
網(wǎng)絡(luò)請(qǐng)求可能遇到各種問題,需添加異常處理:
url = "https://api.example.com/products"
try:
# 設(shè)置超時(shí)時(shí)間(防止無限等待)
response = requests.get(url, timeout=10) # 10秒超時(shí)
# 主動(dòng)拋出HTTP錯(cuò)誤(如404、500)
response.raise_for_status()
except requests.exceptions.HTTPError as e:
print(f"HTTP錯(cuò)誤:{e}") # 如401權(quán)限不足、404未找到
except requests.exceptions.ConnectionError:
print("連接錯(cuò)誤(可能是URL錯(cuò)誤或網(wǎng)絡(luò)問題)")
except requests.exceptions.Timeout:
print("請(qǐng)求超時(shí)")
except requests.exceptions.RequestException as e:
print(f"其他錯(cuò)誤:{e}")
else:
# 無異常時(shí)處理響應(yīng)
print("請(qǐng)求成功,數(shù)據(jù):", response.json())
六、高級(jí)用法
1. 會(huì)話保持(復(fù)用連接)
多次調(diào)用同一 API 時(shí),用Session保持連接,提升效率:
# 創(chuàng)建會(huì)話對(duì)象
with requests.Session() as session:
# 會(huì)話中設(shè)置全局headers(所有請(qǐng)求都會(huì)攜帶)
session.headers.update({"Authorization": "Bearer your_token"})
# 第一次請(qǐng)求(建立連接)
response1 = session.get("https://api.example.com/products/1")
# 第二次請(qǐng)求(復(fù)用連接,速度更快)
response2 = session.get("https://api.example.com/products/2")
2. 上傳文件
url = "https://api.example.com/upload"
files = {
"file": open("image.jpg", "rb") # 打開文件(二進(jìn)制模式)
}
response = requests.post(url, files=files)
print("上傳結(jié)果:", response.json())
七、總結(jié)
requests庫(kù)調(diào)用 API 的核心流程是:
- 確定請(qǐng)求類型(GET/POST 等)和 URL;
- 準(zhǔn)備參數(shù)(params)、請(qǐng)求體(json/payload)、請(qǐng)求頭(headers);
- 發(fā)送請(qǐng)求并處理響應(yīng)(解析 JSON、判斷狀態(tài)碼);
- 添加異常處理確保代碼健壯性。
通過上述方法,可應(yīng)對(duì)絕大多數(shù) API 調(diào)用場(chǎng)景,包括電商平臺(tái)接口、支付接口、第三方服務(wù)接口等。實(shí)際開發(fā)中需結(jié)合具體 API 文檔調(diào)整參數(shù)和格式。
以上就是使用Python的requests庫(kù)調(diào)用API接口的詳細(xì)步驟的詳細(xì)內(nèi)容,更多關(guān)于Python requests調(diào)用API接口的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python中的np.random.seed()隨機(jī)數(shù)種子問題及解決方法
隨機(jī)數(shù)種子,相當(dāng)于我給接下來需要生成的隨機(jī)數(shù)一個(gè)初值,按照我給的這個(gè)初值,按固定順序生成隨機(jī)數(shù),接下來通過本文給大家介紹Python中的np.random.seed()隨機(jī)數(shù)種子問題,需要的朋友可以參考下2022-04-04
django的403/404/500錯(cuò)誤自定義頁(yè)面的配置方式
這篇文章主要介紹了django的403/404/500錯(cuò)誤自定義頁(yè)面的配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05
python爬蟲入門教程--利用requests構(gòu)建知乎API(三)
這篇文章主要給大家介紹了關(guān)于python爬蟲入門之利用requests構(gòu)建知乎API的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-05-05
Python中的"沒有那個(gè)文件"錯(cuò)誤(FileNotFoundError)的解決方法詳解
在Python編程中,遇到“沒有那個(gè)文件”錯(cuò)誤(FileNotFoundError)是常見的問題之一,本文將詳細(xì)分析這個(gè)錯(cuò)誤的原因,并提供實(shí)用的解決方案和指南,有需要的可以參考下2024-11-11
python中創(chuàng)建一個(gè)包并引用使用的操作方法
python包在開發(fā)中十分常見,一般通過導(dǎo)入包含特定功能的python模塊包進(jìn)行使用。當(dāng)然,也可以自己創(chuàng)建打包模塊,然后發(fā)布,安裝使用,這篇文章主要介紹了python中如何創(chuàng)建一個(gè)包并引用使用,需要的朋友可以參考下2022-08-08
pandas如何將dataframe中的NaN替換成None
這篇文章主要介紹了pandas如何將dataframe中的NaN替換成None問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08

