はじめに
pythonのRequestsを使えば、簡単にHTTPリクエストを作成することができる。
本稿では、Requestsの基本的な使い方を紹介する。
インストール
Requestsは、pipでインストールできる。
% pip3 install requests
また、以下でインポートする。
import requests
リクエストの生成
Requestsでは、以下7メソッドを使用してリクエストを生成することができる。
戻り値は、Response オブジェクトである。
requests.request(method, url, **kwargs)
また、method が指定されている以下のメソッドでも実現できる。
requests.get(url, **kwargs)
requests.post(url, **kwargs)
requests.put(url, **kwargs)
requests.delete(url, **kwargs)
requests.head(url, **kwargs)
requests.options(url, **kwargs)
オプション
-
params
辞書またはバイナリ
URLのクエリ文字列として送信される -
data
辞書、バイナリ、またはファイルオブジェクト
ボディに埋め込まれ送信される -
headers
HTTPヘッダの辞書
ヘッダとして送信される -
cookies
辞書または CookieJar オブジェクト
クッキーとして送信される -
files
名前とファイルオブジェクトの辞書 ( {名前:ファイルオブジェクト} )
または、( {名前 : (ファイル名:ファイルオブジェクト)} )
multipart エンコードしファイルをアップロードする -
auth
認証タプル
Basic/Digest/Custom HTTP 認証用 -
timeout
Float
リクエストのタイムアウトを指定する -
allow_redirects
Boolean
POST/PUT/DELETE リダイレクトを許可するならTrue -
proxies
次のような辞書
{'http': 'http://127.0.0.1:1234'} -
verify
Boolean
真ならば、SSL証明書を検証する -
stream
Boolean
False の場合、レスポンスの内容が直ちにダウンロードされる -
cert
文字列またはタプル
文字列の場合、ssl クライアント証明書のパス (.pem)
タプルの場合、('cert', key') のペア
ステータスコードの取得
r = requests.get("http://httpbin.org/get")
print(r.status_code)
# 200
レスポンスヘッダの取得
r = requests.get("http://httpbin.org/get")
print(r.headers)
# {'X-Powered-By': 'Flask', 'Connection': 'keep-alive', 'X-Processed-Time': '0.000687837600708', 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true', 'Server': 'meinheld/0.6.1', 'Via': '1.1 vegur', 'Content-Length': '267', 'Date': 'Mon, 06 Nov 2017 01:49:32 GMT'}
上記は普通の辞書に見えるが、参照時に大文字と小文字を区別しない。
print(r.headers["Content-Type"])
# 'application/json'
print(r.headers["CONTENT-TYPE"])
# 'application/json'
また、getメソッドを使用しても要素を取得することができる。
print(r.headers.get("Content-Type"))
# 'application/json'
print(r.headers.get("content-type"))
# 'application/json'
ボディの取得
テキストを取得
r = requests.get("http://httpbin.org/get")
print(r.text)
# {
# "args": {},
# "headers": {
# "Accept": "*/*",
# "Accept-Encoding": "gzip, deflate",
# "Connection": "close",
# "Host": "httpbin.org",
# "User-Agent": "python-requests/2.18.4"
# },
# "origin": "118.103.21.193",
# "url": "http://httpbin.org/get"
# }
bytesとして取得
print(r.content)
# b'{\n "args": {}, \n "headers": {\n "Accept": "*/*", \n "Accept-Encoding": "gzip, deflate", \n "Connection": "close", \n "Host": "httpbin.org", \n "User-Agent": "python-requests/2.18.4"\n }, \n "origin": "x.x.x.x", \n "url": "http://httpbin.org/get"\n}\n'
jsonとして取得
r = requests.get("http://httpbin.org/get")
print(r.json())
# {'url': 'http://httpbin.org/get', 'origin': 'x.x.x.x', 'headers': {'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'Accept': '*/*', 'User-Agent': 'python-requests/2.18.4', 'Connection': 'close'}, 'args': {}}
print(r.json()["url"])
# 'http://httpbin.org/get'
画像データを取得、保存する
import requests
from PIL import Image
from io import BytesIO
r = requests.get('http://httpbin.org/image/png')
image = Image.open(BytesIO(r.content))
image.save("test.png")
getのパラメータ追加
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)
print(r.url)
# 'http://httpbin.org/get?key1=value1&key2=value2'
リクエストヘッダの変更
headers = {'user-agent':'test'}
r = requests.get("http://httpbin.org/get", headers=headers)
print(r.json()['headers']['User-Agent'])
# 'test'
フォームの送信
HTMLのフォームのようなデータを送信するには、data 引数に辞書を渡せば良い。
data = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=data)
print(r.json()['form'])
# {'key1': 'value1', 'key2': 'value2'}
エンコードされていないデータを送信したい場合は、文字列を渡せば良い。
import json
r = requests.post("http://httpbin.org/post", data=json.dumps(data))
print(r.json()['data'])
# '{"key1": "value1", "key2": "value2"}'
参照
http://requests-docs-ja.readthedocs.io/en/latest/user/quickstart/
0件のコメント