Python3でリクエストパラメータ付のPOST通信をしたときに、リクエストパラメータが抜け落ちる
この記事でやったことの続き
def http_post(url, headers, body): req = urllib.request.Request(url, json.dumps(body).encode(), headers, 'POST') try: with urllib.request.urlopen(req) as res: body = res.read().decode()
でbodyの中身が
{ 'id' : 1 }
という形だったのだが、
POST先のAPIから「idは必須です」というメッセージが返ってきた。
かなりはまって、かなり検索しまくって、
結果的にどの記事を見たかは覚えてないが、
(たしかStackoverflowだった)
以下のように書き直したら動いた
def http_post(url, headers, body): data = urllib.parse.urlencode(body).encode('utf-8') request = urllib.request.Request(url, data, headers) try: with urllib.request.urlopen(url=url, data=data) as response: body = response.read().decode("utf-8")
リクエストパラメータの処理の仕方を
json.dumps(body).encode()
から
urllib.parse.urlencode(body).encode('utf-8')
に書き換えた。
これでタイトルの問題は解決したのだが、非常に謎。