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'
ここでは.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()
が正常に戻った場合)。