[Python] requests で JSON を POST する

概要

前回の記事で 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サーバのログです。

コメントする