概要
前回の記事で urllib.request を使って POST する実装を紹介したので、今回は requests パッケージを使って JSON を POST する実装例を紹介します。
環境
Python 3.9.1で以下のパッケージで仮想環境を作って動作確認しています。
(tornadoはサーバ側で使っています)
certifi==2020.12.5
chardet==4.0.0
idna==2.10
pip==21.0.1
requests==2.25.1
setuptools==50.3.2
tornado==6.1
urllib3==1.26.4
実装
import json
import logging
import requests
logging.basicConfig(
format='%(asctime)-15s %(levelname)s %(message)s',
level=logging.INFO)
def main():
data = {
'data': {
'key': 'value'
}
}
try:
response = requests.post(
'http://localhost:8080/json',
headers={'Content-Type': 'application/json'},
data=json.dumps(data),
timeout=1 # seconds
)
# ステータスコード4XX, 5XX時に例外を発生させる
response.raise_for_status()
logging.info(response.json())
except requests.exceptions.HTTPError as e:
logging.exception(
f'Server returned error: '
f'status = {e.response.status_code} '
f'reason = {e.response.reason}')
except requests.exceptions.ConnectionError:
logging.exception('Connection error')
except requests.exceptions.Timeout:
logging.exception('Timeout')
if __name__ == '__main__':
main()
動作確認
少し前の記事で作成したWebサーバにリクエストを投げて動作を確認します。
上のウインドウが実装したプログラムを実行している様子です。
下のウインドウは少し前の記事で作成したWebサーバのログです。