[英]file upload works with curl and postman but not python requests
[英]Python using Requests to cURL a file upload
我正在嘗試將特定的 curl 方法轉換為 Python 的請求模塊,以將文件上傳到 api。 我適用於非文件請求的標准方法如下所示:
import requests
requestObject = requests.Session()
standard_headers = {header1:headerValue1,header2:headerValue2}
payload = {key1:value1,key2:value2}
url = 'https://myUrl.com/apiCall'
requestObject.post(url,headers=standard_headers, json=payload)
這適用於我需要向 API 發出的非文件請求。 但是對於文件上傳,API 文檔顯示了使用 curl 的方法:
curl -XPOST -H 'header1' -H 'header2 'https://myUrl.com/apiCall' \
-F 'attachment=@/path/to/my/file' \
-F '_json=<-;type=application/json' << _EOF_
{
"key1":"keyValue1",
"key2":"keyValue2"
}
_EOF_
我測試了 curl 命令,它運行成功。
我的問題是如何使用 Python 請求中的<< _EOF_
方法翻譯 curl 方法。 我的一個想法是簡單地使用requests
模塊中的“文件”選項:
requestObject = requests.Session()
standard_headers = {header1:headerValue1,header2:headerValue2}
payload = {key1:keyValue1,key2:keyValue2}
url = 'https://myUrl.com/apiCall'
file_to_upload = {'filename': open('/path/to/my/file', 'rb')}
requestObject.post(url,headers=standard_headers, files=file_to_upload, json=payload)
但這似乎不起作用,因為必要的 json 參數( payload
中的值)似乎沒有傳遞給文件上傳
我還嘗試將 json 參數直接指定到file_to_upload
變量中:
requestObject = requests.Session()
standard_headers = {header1:headerValue1,header2:headerValue2}
url = 'https://myUrl.com/apiCall'
file_to_upload = {'attachment': open('/path/to/my/file', 'rb'),'{"key1":"keyValue1","key2":"keyValue2"}'}
requestObject.post(url,headers=standard_headers, files=file_to_upload)
類似的結果,似乎我沒有正確傳遞必要的 json 值。 我嘗試了其他一些方法,但我忽略了一些東西。 任何關於我應該如何構建我的請求的見解都值得贊賞。
好的,我設法讓它工作並為將來可能需要幫助的任何人發布。
訣竅是在數據字段中包含_json
鍵。 我的代碼最終看起來像這樣:
import requests
requestObject = requests.Session()
standard_headers = {header1:headerValue1,header2:headerValue2}
json_fields = json.dumps({
"key1": "key1Value",
"key2": "key2Value"
})
payload = {"_json":json_fields)
file = {"attachment": /path/to/my/file}
url = 'https://myUrl.com/apiCall'
requestObject.post(url,headers=standard_headers, files=file, data=payload)
希望對未來的人有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.