![](/img/trans.png)
[英]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.