HTTPリクエスト
テクノロジ系 / L06 function — 関数設計
HTTPリクエスト — ハンズオン
前提: Pythonがインストールされている
目標: requestsでGETとPOSTを送り、JSONレスポンスを処理できる
Step 1: ライブラリをインストールする
pip install requests
確認:
python3 -c "import requests; print(requests.__version__)"
Step 2: GETリクエストを送る
get_request.py を作成:
import requests
# 公開テストAPI(返ってきたJSONを表示する)
response = requests.get("https://httpbin.org/json")
print(f"ステータスコード: {response.status_code}")
print(f"Content-Type: {response.headers['Content-Type']}")
data = response.json()
print("レスポンスデータ:")
print(data)実行:
python3 get_request.py
確認: ステータスコードが200で、JSONデータが表示されるか確認する。
Step 3: クエリパラメータを付ける
get_params.py を作成:
import requests
params = {
"name": "田中",
"department": "技術部",
"year": 2024
}
response = requests.get("https://httpbin.org/get", params=params)
data = response.json()
print("送ったパラメータ:")
for key, value in data["args"].items():
print(f" {key}: {value}")
print(f"\n実際のURL: {response.url}")確認: URLにパラメータが付いていることを確認する。
Step 4: POSTリクエストを送る
post_request.py を作成:
import requests
payload = {
"user": "田中",
"message": "テストメッセージ",
"priority": "high"
}
response = requests.post(
"https://httpbin.org/post",
json=payload
)
data = response.json()
print(f"ステータスコード: {response.status_code}")
print("送ったデータが返ってきた:")
print(data["json"])Step 5: エラーハンドリングを試す
error_handling.py を作成:
import requests
def safe_get(url, timeout=5):
try:
response = requests.get(url, timeout=timeout)
response.raise_for_status()
return response.json()
except requests.HTTPError as e:
print(f"HTTPエラー {e.response.status_code}: {url}")
return None
except requests.ConnectionError:
print(f"接続エラー: {url}")
return None
except requests.Timeout:
print("タイムアウト")
return None
# 成功ケース
result = safe_get("https://httpbin.org/json")
print("成功:", result is not None)
# 404エラーケース
result = safe_get("https://httpbin.org/status/404")
print("404の結果:", result)
# 500エラーケース
result = safe_get("https://httpbin.org/status/500")
print("500の結果:", result)完了チェック
- [ ] GETリクエストを送ってJSONレスポンスを確認した
- [ ] クエリパラメータを付けてURLがどう変わるか確認した
- [ ] POSTで辞書データを送り、返ってきたデータを確認した
- [ ] HTTPエラー・接続エラーのハンドリングを動作確認した
- [ ] ステータスコード200/404/500の意味を説明できる
考えてみよう
既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。
Q1. GETとPOSTの使い分けを説明してください。
GET: データを取得する。検索条件などはURLのクエリパラメータとして渡す。
POST: データを送信・作成する。送信内容はリクエストBodyに入れる(JSON等)。
例: 検索→GET、ログイン・フォーム送信→POST
Q2. ステータスコード 401 と 429 はそれぞれ何を意味しますか?
401 Unauthorized: 認証エラー。APIキーが誤っている、またはAuthorizationヘッダーがない。
429 Too Many Requests: レート制限。短時間にリクエストを送りすぎた場合に返される。
Q3. 以下のコードで params はURLにどう変換されますか?
import requests
params = {"name": "田中", "age": 30}
response = requests.get("https://api.example.com/users", params=params)https://api.example.com/users?name=田中&age=30
requests.get に params を渡すと、自動でURLエンコードしてクエリ文字列に変換する。
Q4. response.raise_for_status() はなぜ使いますか?
ステータスコードが4xx(クライアントエラー)または5xx(サーバーエラー)の場合に、
自動で HTTPError 例外を発生させるため。
これを使わないと、404や500のエラーレスポンスでも例外が発生せず、
エラーに気づかないまま処理が続いてしまう可能性がある。