はじめに
WebサービスやAPIと連携する際、PythonでのHTTPリクエスト処理は欠かせません。その中で最も使いやすいライブラリがRequestsです。
Requestsは、PythonでHTTPリクエストを簡単に送信し、レスポンスを処理するためのライブラリです。この記事では、Requestsの基本的な使い方、便利な機能、トラブルシューティングについてわかりやすく解説します。
Requestsライブラリとは
概要
Requestsは、Python標準ライブラリのurllib
の代替として設計されたシンプルで直感的なHTTPリクエストライブラリです。複雑なコードを書くことなく、HTTPリクエストの送信、レスポンスの処理が可能です。
Requestsライブラリの主な特徴
- シンプルな構文
短いコードで直感的に操作可能。 - 豊富なHTTPメソッドのサポート
GET、POST、PUT、DELETE、HEADなどのリクエストを簡単に送信。 - セッション管理
Cookieや認証情報の管理が可能。 - 強力なエラーハンドリング
ステータスコードの確認や例外処理が簡単。
Requestsのインストール
RequestsはPyPIで提供されており、以下のコマンドでインストールできます:
pip install requests
インストールの確認:
インストール後、以下のコマンドでバージョンを確認できます:
pip show requests
出力例:
Name: requests
Version: 2.28.1
Summary: Python HTTP for Humans.
基本的な使い方
GETリクエスト
GETリクエストは、サーバーからデータを取得するために使用します。
import requests
response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
print(response.status_code) # ステータスコード
print(response.json()) # レスポンスのJSONデータ
説明:
requests.get
は指定されたURLにGETリクエストを送信します。response.status_code
でHTTPステータスコードを確認。response.json()
でレスポンスをJSON形式で取得します。
POSTリクエスト
POSTリクエストは、サーバーにデータを送信するために使用します。
import requests
data = {"title": "foo", "body": "bar", "userId": 1}
response = requests.post("https://jsonplaceholder.typicode.com/posts", json=data)
print(response.status_code) # ステータスコード
print(response.json()) # サーバーからのレスポンス
説明:
json=data
で送信データを指定します。- サーバーからのレスポンスもJSON形式で取得可能です。
ヘッダーの追加
カスタムヘッダーを追加する場合、以下のように設定します:
headers = {"Authorization": "Bearer YOUR_ACCESS_TOKEN"}
response = requests.get("https://api.example.com/data", headers=headers)
print(response.text)
説明:
headers
引数でカスタムヘッダーを指定します。- 認証情報やAPIキーを送信する際に使用します。
タイムアウトの設定
リクエストにタイムアウトを設定することで、長時間待機を回避できます:
response = requests.get("https://api.example.com/data", timeout=5)
説明:
timeout=5
は、リクエストが5秒以上かかった場合にエラーをスローします。
応用的な使い方
セッション管理
複数のリクエストでCookieやヘッダーを共有する場合、セッションを使用します。
with requests.Session() as session:
session.headers.update({"Authorization": "Bearer YOUR_ACCESS_TOKEN"})
response = session.get("https://api.example.com/data")
print(response.text)
説明:
requests.Session()
を使用すると、複数のリクエスト間で状態を共有できます。
ファイルのアップロード
ファイルをサーバーにアップロードする場合:
files = {"file": open("example.txt", "rb")}
response = requests.post("https://api.example.com/upload", files=files)
print(response.status_code)
説明:
files
引数でファイルを送信できます。- ファイルオブジェクトを
open()
で開き、送信します。
プロキシの利用
プロキシを通じてリクエストを送信する場合:
proxies = {"http": "http://proxy.example.com:8080"}
response = requests.get("https://api.example.com/data", proxies=proxies)
説明:
proxies
引数でプロキシサーバーを指定します。
エラーハンドリング
ステータスコードの確認
ステータスコードを手動で確認することでエラー処理が可能です:
response = requests.get("https://api.example.com/data")
if response.status_code == 200:
print("Success!")
else:
print(f"Error: {response.status_code}")
例外処理
リクエスト中に発生する例外を処理するには:
try:
response = requests.get("https://api.example.com/data", timeout=5)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f"An error occurred: {e}")
説明:
raise_for_status()
は、HTTPエラーが発生した場合に例外をスローします。
Requestsを使う際の注意点
- 認証情報の管理
APIキーやトークンを含むリクエストを送信する際、機密情報が外部に漏れないように注意しましょう。 - 適切なタイムアウト設定
タイムアウトを設定することで、リクエストの待機時間を制限できます。 - レスポンスの検証
サーバーからのレスポンスデータを適切に検証することで、エラーや不正データを回避できます。
まとめ
Requestsライブラリは、PythonでのHTTPリクエストを簡単かつ効率的に操作するための非常に強力なツールです。この記事で紹介した基本操作や応用例を活用して、Web APIや外部サービスとの連携をスムーズに行いましょう!
コメント