[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技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology