web-dev-qa-db-ja.com

Pythonリクエスト-POSTファイルからのデータ

Curlを使用して、ファイルからのデータを含むPOSTリクエストを送信しました。

pythonリクエストモジュールを使用して同じことを達成しようとしています。ここに私のpythonスクリプトがあります

import requests
payload=open('data','rb').read()
r = requests.post('https://IP_ADDRESS/rest/rest/2', auth=('userid', 'password'), data=payload , verify=False)
print r.text

データファイルは以下のようになります

'ID' : 'ISM03'

しかし、私のスクリプトはファイルからデータをPOSTしていません。ここで何か不足していますか?.

Curlでは、以下のようなコマンドを使用していました

Curl --data @filename -ik -X POST 'https://IP_ADDRESS/rest/rest/2' 
19
user2190101

ここでは.read()を使用する必要はなく、オブジェクトを直接ストリーミングするだけです。 Content-Typeヘッダーを明示的に設定する必要があります。 _--data_を使用する場合、curlはこれを実行しますが、requestsは実行しません。

_with open('data','rb') as payload:
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    r = requests.post('https://IP_ADDRESS/rest/rest/2', auth=('userid', 'password'),
                      data=payload, verify=False, headers=headers)
_

開いているファイルオブジェクトをコンテキストマネージャーとして使用して、ブロックが終了したときに自動的に閉じられるようにしました(たとえば、例外が発生した場合やrequests.post()が正常に戻った場合)。

35
Martijn Pieters