今回は、Pythonのrequestsでヘッダーを設定する方法についてご紹介します。
requestsでヘッダーを設定するメリット
Pythonのrequestsライブラリは、HTTP通信を簡単に扱える便利なツールです。
任意のヘッダーを設定することで、User-AgentやContent-Type、認証情報などをサーバへ送信できます。
ヘッダーはHTTP通信のメタ情報となるため、APIの仕様に合わせて適切に設定することが重要です。
基本的な使い方
requestsを使ってヘッダーを設定するには、headers引数に辞書形式で指定します。
以下のコードは、GETリクエストでUser-AgentやAcceptヘッダーを設定する例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import requests # URL例 url = "https://example.com/api" # ヘッダーを辞書形式で定義 headers = { "User-Agent": "MyCustomAgent/1.0", # 任意のUser-Agentを指定 "Accept": "application/json" # サーバからJSONを受け取る } # GETリクエストでヘッダーを送信 response = requests.get(url, headers=headers) # ステータスコードとレスポンスの中身を確認 print(response.status_code) print(response.text) |
このように、headersを使えばリクエスト単位で任意のヘッダーを設定できます。
以下は実際の実行結果を例示したものです。
200
{“result”:”Success”,”data”:”サンプルデータ”}
POSTリクエストでのヘッダー設定例
POSTリクエストの場合も基本は同じです。
JSON形式のデータを送信する時は、Content-Typeをapplication/jsonに指定し、認証が必要な場合はAuthorizationヘッダーを併せて設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import requests # URL例 url = "https://example.com/api/submit" # ヘッダーを定義 headers = { "Content-Type": "application/json", "Authorization": "Bearer your_token_here" } # 送信するデータを辞書形式で用意 payload = { "name": "Alice", "age": 30 } # POSTリクエストでJSONを送信 response = requests.post(url, json=payload, headers=headers) # レスポンスボディをJSON形式で出力 print(response.json()) |
Sessionを使った共通ヘッダー設定
複数のリクエストで同じヘッダーを使いたい場合、requests.Session()を利用すると便利です。
セッションオブジェクトに対してheaders.update()を行うことで、すべてのリクエストで共通のヘッダーを設定できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import requests # セッションを作成 session = requests.Session() # セッション全体で共通して使うヘッダーを設定 session.headers.update({ "User-Agent": "MySessionAgent/2.0", "Accept": "application/xml" }) # 複数のリクエストをセッションから送信 response1 = session.get("https://example.com/api/resource1") response2 = session.get("https://example.com/api/resource2") print(response1.status_code, response2.status_code) |
セッションを用いると、共通の情報を持ったままAPIを連続で呼び出す際に便利です。
実用的な具体例
Cookieを送信する例
Cookie情報を直接ヘッダーへ指定する方法もあります。
Cookieヘッダーをカスタム定義することで、ログイン後の操作やセッション情報を再現することが可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import requests # URL例 url = "https://example.com/dashboard" # Cookieヘッダーを直接設定 headers = { "Cookie": "sessionid=abcd1234; logged_in=true" } # Cookieを含めてリクエストを送信 response = requests.get(url, headers=headers) print(response.status_code) |
カスタムヘッダーを利用する例
API側で特定のカスタムヘッダーを求められるケースもあります。
その場合も通常のヘッダー同様、キーと値を辞書で指定すれば問題ありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import requests # URL例 url = "https://example.com/api/data" # カスタムヘッダーを定義 headers = { "X-Custom-Header": "CustomValue", "X-Request-ID": "12345" } # GETリクエストで送信 response = requests.get(url, headers=headers) print(response.status_code) |
よくあるエラーや注意点
ヘッダーを設定する際によく起こる問題として、セッション全体のヘッダーとリクエスト個別のヘッダーが衝突するケースがあります。
同じキーをセッションとリクエストに設定すると、リクエスト時のヘッダーが優先されるため、意図した値が送信されているか事前に確認すると安心です。
また、AuthorizationトークンやCookieなどの重要な情報はソースコードに直接埋め込まないよう注意してください。
APIキーやパスワードなどは環境変数や設定ファイルなどから読み込み、バージョン管理システムに含めないようにするとセキュリティリスクを下げられます。
ヘッダー名の大文字小文字はHTTP仕様上区別されませんが、“User-Agent”、“Content-Type”のように一般的な形式で書く方が読みやすくなります。
必要なヘッダーについては、サーバ側のAPIドキュメントをあらかじめ確認しましょう。
まとめ
Pythonのrequestsライブラリでは、辞書形式のheadersを使うことで簡単にヘッダーを設定できます。
基本的なGET・POSTリクエストから、セッションを利用した共通ヘッダーの設定、Cookieやカスタムヘッダーなど、幅広いケースに対応可能です。
API仕様やセキュリティ要件を把握しながら、必要なヘッダーを正しく設定することが大切です。