PythonでAPIとやりとりする際に非常に便利なのが requests
ライブラリです。
その中でも .post()
は「データを送信する」という操作を行うための基本的なメソッドです。
この記事では .post()
の基本的な使い方から、便利なオプション、実際の活用シーンまで詳しく解説します。
.post()とは?
.post()
は、HTTPのPOSTリクエストを送るためのメソッドです。
サーバーにデータを送りたい時、例えば、
- 「ログイン情報を送る」
- 「フォームの内容を送信する」
といった場面で使われます。
Pythonでは requests.post()
を使って、URLと一緒に送りたいデータを渡すだけでPOSTリクエストを送ることができます。
使い方
基本的な使い方
まずは、最も基本的なPOSTリクエストのコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 |
import requests response = requests.post( "https://httpbin.org/post", data={"name": "Taro", "age": "25"} ) print(response.status_code) print(response.text) |
このコードでは:
https://httpbin.org/post
というテスト用のAPIに- 名前と年齢のデータを辞書形式で
data
に渡して送信しています
結果として、送信された内容をサーバーが受け取り、そのレスポンスが返ってきます。
status_code
でステータス(200など)を確認でき、text
でレスポンスの内容を見ることができます。
具体例:JSONデータを送信する
APIによっては、data
ではなく json
形式での送信が求められることもあります。
その場合は json=
を使います。
1 2 3 4 5 6 7 8 9 |
import requests response = requests.post( "https://httpbin.org/post", json={"username": "user123", "password": "pass123"} ) print(response.json()) |
- ログイン情報のようなデータをJSON形式でサーバーに送信
response.json()
を使って、レスポンスを辞書形式で取得
json=
を使うと、ヘッダーに Content-Type: application/json
が自動で追加され、API側でも正しく受け取ってもらえます。
具体例:ヘッダーを追加する
APIによっては、特定のヘッダー(認証トークンなど)をつけて送信する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import requests headers = { "Authorization": "Bearer YOUR_TOKEN_HERE", "Content-Type": "application/json" } response = requests.post( "https://example.com/api", json={"action": "start"}, headers=headers ) print(response.status_code) |
このように、headers=
引数で辞書形式のヘッダーを追加できます。
特にAPI連携では、トークン認証やAPIキーなどをヘッダーで渡すことが一般的です。
使えるオプション一覧
requests.post()
では、以下のようなオプションが使えます。
引数 | 説明 |
---|---|
data= |
フォーム形式のデータを送信(辞書または文字列) |
json= |
JSON形式のデータを送信(辞書) |
headers= |
任意のHTTPヘッダーを追加 |
timeout= |
タイムアウト時間を秒数で指定(例:timeout=5 ) |
auth= |
ベーシック認証(例:auth=("user", "pass") ) |
cookies= |
クッキー情報を追加 |
これらを組み合わせることで、より複雑なPOSTリクエストにも対応できます。
ファイルをアップロードするには?
files=
引数を使えば、画像やドキュメントなどのファイルを一緒に送信することも可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import requests files = { "file": open("example.txt", "rb") } response = requests.post( "https://httpbin.org/post", files=files ) print(response.json()) |
ファイルは辞書形式で指定し、open()
でバイナリモードで読み込みます。
アップロード処理を自動化したいときに非常に便利です。
エラー処理の方法
POSTリクエストが失敗することもあります。
その場合に備えて、ステータスコードをチェックしておきましょう。
1 2 3 4 5 6 7 |
response = requests.post("https://example.com/api", json={}) if response.status_code == 200: print("成功") else: print(f"失敗しました(コード: {response.status_code})") |
また、タイムアウトなどのネットワークエラーに対応するには、try
~ except
を使います。
1 2 3 4 5 |
try: response = requests.post("https://example.com/api", timeout=3) except requests.exceptions.Timeout: print("タイムアウトしました") |
まとめ
今回は requests.post()
の使い方を詳しく紹介しました。
- POSTリクエストはデータを送るときに使う
- フォーム形式なら
data=
, JSON形式ならjson=
を使い分ける - ヘッダーやファイル送信など、多くのオプションを組み合わせ可能
- エラー処理やタイムアウト設定も重要
APIと連携してデータを送受信するには欠かせないメソッドなので、ぜひ実際に使いながら理解を深めてみてください!