Pythonのrequestsライブラリについて
Pythonのrequestsライブラリは、HTTPリクエストを簡単に送信することができるライブラリです。GET、POST、PUT、DELETEなどのHTTPメソッドを使い、URLエンコード、JSON、multipart/form-dataなどの形式でデータを送信できます。
POSTリクエストの基本的な使い方
requestsライブラリを使ったPOSTリクエストの基本的な使い方は以下のようになります。
import requests url = 'http://example.com/api' data = {'key1': 'value1', 'key2': 'value2'} response = requests.post(url, data=data) print(response.text)
上記の例では、url
にPOSTリクエストを送信し、data
には送信するデータを指定しています。レスポンスはresponse
に格納され、response.text
で取得できます。
multipart/form-data形式でのPOSTリクエストの方法
ファイルをアップロードする場合や、HTMLフォームのように複数のデータを送信する場合には、multipart/form-data形式を使います。
requestsライブラリでmultipart/form-data形式を使う場合は、files
パラメータを使います。以下は、ファイルをアップロードする場合の例です。
import requests url = 'http://example.com/upload' files = {'file': open('example.jpg', 'rb')} response = requests.post(url, files=files) print(response.text)
上記の例では、files
に送信するファイルを指定しています。ファイルはopen()
で開き、'rb'
でバイナリモードで読み込んでいます。
HTMLフォームのように複数のデータを送信する場合には、data
パラメータとfiles
パラメータを同時に指定します。以下は、HTMLフォームでusername
とpassword
を送信する場合の例です。
import requests url = 'http://example.com/login' data = {'username': 'user1', 'password': 'pass1'} files = {'profile_photo': open('photo.jpg', 'rb')} response = requests.post(url, data=data, files=files) print(response.text)
POSTリクエストによるレスポンスの取得方法
requestsライブラリでPOSTリクエストによるレスポンスを取得する場合、response
オブジェクトのtext
属性やcontent
属性、json()
メソッドを使います。
text
属性は、レスポンスの文字列を取得します。
import requests url = 'http://example.com/api' data = {'key1': 'value1', 'key2': 'value2'} response = requests.post(url, data=data) print(response.text)
content
属性は、レスポンスのバイト列を取得します。
import requests url = 'http://example.com/api' data = {'key1': 'value1', 'key2': 'value2'} response = requests.post(url, data=data) print(response.content)
json()
メソッドは、レスポンスをJSON形式でパースして取得します。
import requests url = 'http://example.com/api' data = {'key1': 'value1', 'key2': 'value2'} response = requests.post(url, data=data) json_data = response.json() print(json_data)
レスポンスの解析とエラーハンドリング
レスポンスを解析する場合には、response
オブジェクトのstatus_code
属性やheaders
属性を使います。
status_code
属性は、HTTPステータスコードを取得します。200番台は正常終了、400番台はクライアントエラー、500番台はサーバエラーを表します。
import requests url = 'http://example.com/api' data = {'key1': 'value1', 'key2': 'value2'} response = requests.post(url, data=data) if response.status_code == 200: print('Success!') else: print('Error! status_code=' + str(response.status_code))
headers
属性は、レスポンスのヘッダーを取得します。例えば、レスポンスのContent-TypeがJSONの場合は、response.json()
でJSONをパースできます。
import requests url = 'http://example.com/api' data = {'key1': 'value1', 'key2': 'value2'} response = requests.post(url, data=data) if response.headers['Content-Type'] == 'application/json': json_data = response.json() print(json_data) else: print('Error! Content-Type=' + response.headers['Content-Type'])
また、エラーが発生した場合には、response.raise_for_status()
で例外を発生させることができます。
import requests url = 'http://example.com/api' data = {'key1': 'value1', 'key2': 'value2'} response = requests.post(url, data=data) try: response.raise_for_status() except requests.exceptions.HTTPError as e: print('Error! ' + str(e))
まとめ
Pythonのrequestsライブラリを使うことで、簡単にHTTPリクエストを送信することができます。POSTリクエストによるデータ送信やmultipart/form-data形式でのファイルアップロード、レスポンスの取得方法、エラーハンドリング、実践的な例などについて紹介しました。