[Python] requestsの使い方

2021年8月27日金曜日

Python

PythonからREST APIなどを呼び出すためHTTPリクエストを送信する場合に利用する
Requestsと呼ばれるPython libraryの使い方を紹介します


インストール方法

pip install requests

# proxy環境下の場合は下記
pip install requests --proxy http://user:pass@sample.proxy.local:port

Requestsのインポート方法

import requests

テスト用URL

http://httpbin.org
https://httpbin.org
http://eu.httpbin.org
https://eu.httpbin.org
https://hub.docker.com/r/kennethreitz/httpbin/

httpbinはHTTPリクエスト、レスポンスのテストのために提供されたWebサービスです
上記URLにリクエストを送るとリクエストの内容等を表示してくれるためテストに便利です

リクエスト方法

# HTTP GET
r = requests.get('http://httpbin.org/get')
# HTTP POST
r = requests.post("http://httpbin.org/post")
# HTTP PUT
r = requests.put("http://httpbin.org/put")
# HTTP DELETE
r = requests.delete("http://httpbin.org/delete")
# HTTP HEAD
r = requests.head("http://httpbin.org/get")
# HTTP OPTIONS
r = requests.options("http://httpbin.org/get")

パラメータの付与・データ送信

# 送信パラメータ・データ
payload = {'key1': 'value1', 'key2': 'value2'}

# HTTP GET:URLにパラメータを渡す
r = requests.get("http://httpbin.org/get", params=payload)
# HTTP POST:データの送信(payloadはエンコードされる)
r = requests.post("http://httpbin.org/post", data=payload)
# HTTP POST:データの送信(payloadはエンコードされずstringのまま送信される)
r = requests.post("http://httpbin.org/post", data=json.dumps(payload))
# HTTP POST:データの送信(タプルの送信)
payload_tuples = [('key1', 'value1'), ('key1', 'value2')]
r1 = requests.post('https://httpbin.org/post', data=payload_tuples)
# HTTP POST:データの送信(dictの送信)
payload_dict = {'key1': ['value1', 'value2']}
r2 = requests.post('https://httpbin.org/post', data=payload_dict)

Requests version2.4.2から下記の方法でもjsonパラメータを送信できます

# dataの代わりにjsonを指定
# payloadはエンコードして送信
payload = {'some': 'data'}
r = requests.post('https://httpbin.org/post', json=payload)

カスタムヘッダーの付与

import json
payload = {'key1': 'value1', 'key2': 'value2'}
# カスタムヘッダーの生成(dict形式)
headers = {'content-type': 'application/json'}
# headersにカスタムヘッダーを指定
r = requests.post("http://httpbin.org/post", headers=headers, data=json.dumps(payload))

cookieの送信

# cookieに送信するデータを生成(dict形式)
cookies = {'cookies_data_1':'sample_cookie'}

r = requests.get('http://httpbin.org/cookies', cookies=cookies)
print(r.text)
# {
#   "cookies": {
#     "cookies_data_1": "sample_cookie"
#   }
# }

レスポンスの確認

# textで取得
r = requests.post("http://httpbin.org/post", data=payload)
print(r.text)
# {
#   "args": {}, 
#   "data": "", 
#   "files": {}, 
#   "form": {
#     "key1": "value1", 
#     "key2": "value2"
#   }, ...

# json形式で取得(json)
r = requests.post("http://httpbin.org/post", data=payload)
print(r.json())
# {'args': {}, 'data': '', 'files': {}, 'form': {'key1': 'value1', 'key2': 'value2'},...

#ステータスコード取得
print(r.status_code)
# 200

# バイナリデータを取得
r = requests.get("https://upload.wikimedia.org/wikipedia/commons/c/c3/Python-logo-notext.svg")
print(r.content)
# b'<?xml version="1.0" encoding="UTF-8"...

# バイナリデータから画像を作成
from PIL import Image
from StringIO import StringIO
i = Image.open(StringIO(r.content))

# responseヘッダー取得(dict形式)
print(r.headers)
# {'Date': 'Fri, 27 Aug 2021 13:23:55 GMT', 
print(r.headers['Content-Type'])
# application/json

Proxy設定

# proxyを設定(dict形式)
proxies = {
  "http": "10.10.1.10:3128",
  "https": "10.10.1.10:1080",
}

r = requests.get("http://example.org", proxies=proxies)

Basic認証

from requests.auth import HTTPBasicAuth
requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass'))

まとめ

本記事ではPythonライブラリのRequestsを紹介させて頂きました。
非常に直感的で簡潔にコードが書ける点がこのライブラリの魅力であると思います。

ソフトウェア開発において、自身が開発するコードを他の方が利用する際には、
このような綺麗に簡潔に利用できるライブラリなどを参考にして
APIを公開しても良いかもしれません

AIエンジニア向けフリーランスならここがおすすめです

まずは無料会員登録

プロフィール

自分の写真
製造業に勤務する傍ら、日々AIの技術動向を調査しブログにアウトプットしています。 AIに関するご相談やお仕事のご依頼はブログのお問い合わせフォームか以下のアドレスまでお気軽にお問い合わせください。 bhupb13511@yahoo.co.jp

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology