requests.get() などのメソッドを実行して返される Response オブジェクトには、サーバーからの応答内容に関するあらゆる情報が格納されています。
開発において、単にHTML本文を取得するだけでなく、通信の成否(ステータスコード)やメタデータ(ヘッダー)、あるいは画像データ(バイナリ)を適切に扱うためには、各属性の役割を理解することが不可欠です。
目次
主要なレスポンス属性一覧
Response オブジェクトが持つ主要なプロパティとその用途は以下の通りです。
| 属性名 | データ型 | 意味・用途 |
status_code | int | HTTPステータスコード(例: 200, 404, 500)。通信が成功したかどうかの判断に使用します。 |
text | str | レスポンスボディを文字列として取得します。encoding 属性に基づいて自動的にデコードされます。HTMLやJSONの確認に使用します。 |
content | bytes | レスポンスボディを**バイト列(バイナリ)**として取得します。画像、PDF、音声ファイルなどを保存する場合に使用します。 |
encoding | str | text 属性にアクセスする際に使用される文字コード(例: 'utf-8', 'ISO-8859-1')。自動推定されますが、手動で上書き設定も可能です。 |
headers | CaseInsensitiveDict | レスポンスヘッダー情報。辞書のように扱えますが、キーの大文字・小文字を区別しない特殊な辞書です。 |
実行可能なサンプルコード
以下のコードは、Pythonの公式ドキュメントサイトにアクセスし、得られたレスポンスの各属性を確認するスクリプトです。文字化けを防ぐためのエンコーディング確認や、サーバー情報の取得方法が含まれています。
import requests
def analyze_response():
# ターゲットURL(Python公式ドキュメント)
target_url = "https://docs.python.org/3/"
print(f"Fetching: {target_url} ...\n")
try:
# リクエストの送信
response = requests.get(target_url, timeout=10)
# 1. ステータスコードの確認
print(f"Status Code: {response.status_code}")
if response.status_code == 200:
print(">> Access Successful")
else:
print(">> Access Failed")
return
# 2. エンコーディング情報の確認
# Requestsがヘッダー等から推測した文字コードが表示されます
print(f"Encoding: {response.encoding}")
# 3. ヘッダー情報の取得
# headersは辞書のようにアクセスできます
print("-" * 30)
content_type = response.headers.get('Content-Type')
server = response.headers.get('Server', 'Unknown')
print(f"Content-Type: {content_type}")
print(f"Server Software: {server}")
# 4. コンテンツの取得(テキスト形式)
# HTMLの内容など、人間が読むデータは .text を使用します
print("-" * 30)
print("Response Body (Text - first 100 chars):")
print(response.text[:100].strip() + "...")
# 5. コンテンツの取得(バイナリ形式)
# .content はバイト列を返します。画像保存などの際に使用します
print("-" * 30)
print("Response Body (Binary - first 20 bytes):")
print(response.content[:20])
except requests.RequestException as e:
print(f"通信エラーが発生しました: {e}")
if __name__ == "__main__":
analyze_response()
解説:text と content の使い分け
r.text(文字列)
Webページ(HTML)やAPIのレスポンス(JSONテキスト)など、テキストデータを扱う場合に使用します。ライブラリが自動的にデコードを行うため、通常はこちらを使います。もし文字化けが発生する場合は、アクセスする前に r.encoding = 'cp932' のように正しい文字コードを手動で設定してから r.text を参照することで解決できます。
r.content(バイト列)
画像ファイル(.jpg, .png)やZIPファイル、PDFなど、テキストではないデータをダウンロードする場合に使用します。これをファイルに書き込む際は、open('image.jpg', 'wb') のようにバイナリモードでファイルを開く必要があります。
