文章

第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 授權

Comments powered by Disqus.