2018-03-10

Python requestsでrequest bodyがJSON形式のデータを送信する方法

Pythonで、requestsを利用している際に、request bodyがJSON形式のデータを送信したかった。その際にはまったことの忘備録。





やりたかったことは、Microsoft Face APIを、Python上で利用したかった。

{"error":{"code":"BadArgument","message":"Request body is invalid."}}

というエラーが出てきてしまって、うまくいかなかった。

原因


JSON形式でrequest bodyを送信できていなかった。元のコードは、

    end_point = BASE_URL + "persongroups/" + GROUP_NAME
    payload = {
        "name": GROUP_NAME
    }
    headers = {
        "Ocp-Apim-Subscription-Key" :SUBSCRIPTION_KEY
    }
    r = requests.put(
        end_point,
        headers = headers,
        params = payload
    )

こんな感じで書いていたんだけど、JSONの処理がされていなかった。
requests.putのdictにparamsではなく、jsonを指定してあげれば解決した。

 end_point = BASE_URL + "persongroups/" + GROUP_NAME
    payload = {
        "name": GROUP_NAME
    }
    headers = {
        "Ocp-Apim-Subscription-Key" :SUBSCRIPTION_KEY
    }
    r = requests.put(
        end_point,
        headers = headers,
        json = payload
    )

こんな感じに治してあげたら治った。

参考
https://stackoverflow.com/questions/40354658/microsoft-face-api-verify-for-python

注目の投稿

 PythonのTweepyを利用して、Twitter APIを利用している。 その中で、ハマったポイントをメモしておく。 まず、Searchに関して。 Twitter検索は、クライアントアプリ側では、全期間の検索が可能になっている。 一方で、APIを利用する際は、過去1週間しか...