Python の「 Requests 」というライブラリについてご紹介します。
import requests
Requests は「 HTTP for Humans 」のキャッチコピーのとおり、 HTTP リクエストを人間が直感的に行えるように作られたライブラリです。インタフェースが洗練されており、かんたん・シンプルに使えるのが特徴です。
GitHub では 5,000 以上もの Star がつけられており、 Python 用のライブラリとしては Django や Flask に並ぶ最も人気の高いもののひとつかと思います。「 Python の好きなライブラリは?」という質問に対してこの Requests をあげる人も多いようです。
Python の HTTP リクエスト用のライブラリとしては、 Requests が作られる前から urllib
や httplib
などが存在したのですが、使い方がいまいちわかりづらい、とのことからこの Requests ライブラリが生み出されたようです。
以下、 Requests の基本的な使い方を見ていきます。
インストール
pip が入っていれば pip コマンドでそのままインストールが可能です。
pip install requests
GETリクエスト
import requests
r = requests.get('https://requests.readthedocs.io/en/latest/')
print r.status_code # 200
print r.headers # ヘッダ情報を辞書型として格納
print r.encoding # ISO-8859-1
GET リクエストは requests.get()
という関数で行えます。 HTTP レスポンスの情報を格納した独自の Response
オブジェクトが返ってくるので、その変数のアトリビュートやメソッドにアクセスする形で結果を利用することができます。
Response
オブジェクトのアトリビュートのうち、 status_code
はステータスコードを、 headers
はヘッダ情報を、 encoding
は文字コードを格納しています。
レスポンスボディの取得
r = requests.get('https://requests.readthedocs.io/en/latest/')
print r.text
print type(r.text).__name__ # unicode
Response
オブジェクトの text
にはレスポンスのボディ部分が格納されています。ボディは自動的に unicode 化されているので、上述の encoding
というのは unicode 化前の原文の文字コードを表します。
bytes データとしてのボディの取得
r = requests.get('https://requests.readthedocs.io/en/latest/')
print r.content
print type(r.content).__name # str
Response
オブジェクトの content
アトリビュートには、レスポンスボディの bytes 形式でのデータが格納されています。
JSON 形式でのボディの取得
r = requests.get('https://www.lifewithpython.com/feeds/posts/default?alt=json')
print r.json()
print type(r.json()).__name__ # list もしくは dict
JSON を返す URL にアクセスしたときの Response
オブジェクトで json()
メソッドを呼び出すと、 JSON データを parse
したものを返してくれます。データ型は通常の list
型あるいは dict 型となります。
POST/PUT/DELETE リクエスト
r = requests.post(URL_TO_POST)
r = requests.put(URL_TO_PUT)
r = requests.delete(URL_TO_DELETE)
r = requests.head(URL_TO_HEAD)
r = requests.options(URL_TO_CHECK_REQUEST_OPTIONS)
GET 以外の POST/PUT/DELETE/HEAD などのリクエストは、それぞれその名前の関数で行うことができます。直感的!
GETリクエストクエリの設定
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("https://httpbin.org/get", params=payload)
print r.url # u'https://httpbin.org/get?key2=value2&key1=value1'
GET リクエストのクエリを指定したい場合は get() 関数の呼び出し時に「 params
」引数に dict
を渡します。最終的にどのような
URL が生成されているかは url
アトリビュートで確認することができます。
POST リクエストデータの設定
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("https://httpbin.org/post", data=payload)
POST リクエストの際の送信データの指定には post()
関数の引数「 data
」を使用します。こちらも GET クエリの場合と同じく dict
を渡します。
以上です。
ここでご紹介したもの以外にもさまざまな機能が用意されていて、高機能でかつわかりやすい、とても pythonic なライブラリとなっています。より詳しく知りたい方は公式のドキュメントをご覧になってみてください。
Requests に興味のある方には次のページも参考になるかもしれません。