web-dev-qa-db-ja.com

Python with urllib3でPOSTリクエストを行うにはどうすればよいですか?

APIにリクエストを送信しようとしていますが、次の本文を渡す必要があります。

{
"description":"Tenaris",
"ticker":"TS.BA",
"industry":"Metalúrgica",
"currency":"ARS"
}

コードは正しいようで、「プロセスは終了コード0で終了しました」で終了しましたが、うまく機能していません。何が欠けているのかわかりませんが、これが私のコードです。

http = urllib3.PoolManager()
http.urlopen('POST', 'http://localhost:8080/assets', headers={'Content-Type':'application/json'},
                 data={
"description":"Tenaris",
"ticker":"TS.BA",
"industry":"Metalúrgica",
"currency":"ARS"
})

ちなみに、これはPythonで作業する最初の日なので、十分に具体的でない場合はすみません。

6
user1953742

JSONリクエストを渡そうとしているので、本文をJSONとしてエンコードし、bodyフィールドで渡す必要があります。

あなたの例では、次のようなことをしたいとします。

import json
encoded_body = json.dumps({
        "description": "Tenaris",
        "ticker": "TS.BA",
        "industry": "Metalúrgica",
        "currency": "ARS",
    })

http = urllib3.PoolManager()

r = http.request('POST', 'http://localhost:8080/assets',
                 headers={'Content-Type': 'application/json'},
                 body=encoded_body)

print r.read() # Do something with the response?

編集:私の元の答えは間違っていました。 JSONをエンコードするように更新しました。また、関連する質問: 生のPOSTデータをurllib3に渡すにはどうすればよいですか?

14
shazow