文章

第26天:網絡請求與 API

課程簡介

在現代應用程式開發中,與外部服務進行資料交換是非常常見的操作。Python 提供了許多工具來進行網絡請求與 API 調用,其中最常用的是 requests 模組。今天的課程將介紹如何發送 HTTP 請求、處理回應、以及如何與 RESTful API 互動。


學習內容

1. requests 模組介紹

requests 是 Python 中最常用的 HTTP 庫,能夠輕鬆地發送 GET、POST 等請求,並處理伺服器回應。

安裝 requests 模組:

1
pip install requests

2. 發送 GET 請求

GET 請求主要用於從伺服器獲取資料。

範例:

1
2
3
4
5
6
7
8
9
10
import requests

# 發送 GET 請求
response = requests.get('https://jsonplaceholder.typicode.com/posts')
print("回應狀態碼:", response.status_code)

# 顯示回應內容
if response.status_code == 200:
    data = response.json()  # 將回應內容轉換為 JSON 格式
    print(data)

2.1 查詢參數

可以通過 params 參數發送查詢參數(Query Parameters)。

範例:

1
2
3
4
# 發送帶有查詢參數的 GET 請求
params = {'userId': 1}
response = requests.get('https://jsonplaceholder.typicode.com/posts', params=params)
print(response.json())

3. 發送 POST 請求

POST 請求主要用於向伺服器發送資料(例如表單、JSON 資料)。

範例:

1
2
3
4
5
# 發送 POST 請求
payload = {'title': 'foo', 'body': 'bar', 'userId': 1}
response = requests.post('https://jsonplaceholder.typicode.com/posts', json=payload)
print("回應狀態碼:", response.status_code)
print("回應資料:", response.json())

3.1 表單數據

可以使用 data 參數發送表單數據。

範例:

1
2
3
4
# 發送表單數據
form_data = {'username': 'test', 'password': '12345'}
response = requests.post('https://example.com/login', data=form_data)
print("回應狀態碼:", response.status_code)

4. 處理回應

4.1 回應狀態碼

HTTP 回應狀態碼用來表示請求是否成功。常見狀態碼:

  • 200: 請求成功
  • 404: 資源未找到
  • 500: 伺服器錯誤

可以通過 response.status_code 獲取狀態碼。

範例:

1
2
3
4
if response.status_code == 200:
    print("請求成功")
else:
    print("錯誤,狀態碼:", response.status_code)

4.2 回應內容

回應的內容可以是 HTML、JSON 或其他格式,使用 response.textresponse.json() 來處理。

範例:

1
2
3
# 取得回應內容
text_content = response.text  # 以文字形式獲取
json_content = response.json()  # 以 JSON 形式獲取

5. 發送帶有標頭的請求

可以使用 headers 參數來指定自訂的 HTTP 標頭,例如設置 API 金鑰或設定用戶代理。

範例:

1
2
3
headers = {'Authorization': 'Bearer your_api_token'}
response = requests.get('https://api.example.com/data', headers=headers)
print(response.json())

6. 處理超時與異常

在發送網絡請求時,可能會遇到網絡超時或其他異常情況,requests 提供了相應的處理方式。

範例:

1
2
3
4
5
6
7
try:
    response = requests.get('https://example.com', timeout=5)  # 設定超時
    response.raise_for_status()  # 檢查是否有 HTTP 錯誤
except requests.exceptions.Timeout:
    print("請求超時")
except requests.exceptions.RequestException as e:
    print("請求發生錯誤:", e)

7. 與 RESTful API 互動

RESTful API 是基於 HTTP 協議的常見 API 形式,使用標準的 HTTP 方法來進行操作。以下是常用的 HTTP 方法:

  • GET: 獲取資源
  • POST: 創建資源
  • PUT: 更新資源
  • DELETE: 刪除資源

範例:向一個模擬的 REST API 發送 GET 請求,並獲取用戶資料:

1
2
response = requests.get('https://jsonplaceholder.typicode.com/users')
print(response.json())

教學重點

  • GET 與 POST 請求:學習如何發送 GET 和 POST 請求,並處理伺服器回應。
  • 查詢參數與表單數據:掌握如何在請求中傳遞查詢參數與表單數據。
  • API 標頭與狀態碼處理:理解如何處理 HTTP 狀態碼,並設置 API 標頭。
  • 異常處理與超時:學會處理請求過程中的異常情況與超時設定。
  • RESTful API 互動:了解如何使用 requests 與 RESTful API 進行互動。

任務

  1. 向一個公開的 API 發送 GET 請求,並顯示其回應資料。
  2. 向一個 API 發送 POST 請求,創建一個新的資源。
  3. 發送帶有查詢參數的 GET 請求,並解析回應中的 JSON 資料。
  4. 模擬一個網絡超時情況,並使用異常處理來捕獲錯誤。
本文章以 CC BY 4.0 授權