[英]Urllib3 POST request with attachment in python
我希望在 python 中使用 urllib3 添加附件但没有成功。 我已经确认 API 本身在邮递员中工作,但无法弄清楚如何将此请求转换为 python。 欣赏我混合对象类型我只是不知道如何避免它。
蟒蛇代码:
import urllib3
import json
api_key = "secret_key"
header = {"X-API-KEY": api_key, "ACCEPT": "application/json", "content-type": "multipart/form-data"}
url = "https://secret_url.com/api/"
http = urllib3.PoolManager()
with open("invoice.html", 'rb') as f:
file_data = f.read()
payload = {
"attchment": {
"file": file_data
}
}
payload = json.dumps(payload)
r = http.request('post', url, headers = header, fields = payload)
print(r.status)
print(r.data)
邮递员 - 它也可以正常工作并正确发送文件名(我猜它会将字节和文件名分开?)
编辑:我也尝试过请求库,因为我对此更熟悉(但不能使用它,因为脚本将在 AWS lambda 中运行)。 从 dict 中删除附件元素允许它运行,但 API 端点给出 401 大概是因为它缺少数据结构的“附件”部分,如下面的邮递员......但是当我把它放进去时,我得到了运行时错误。
r = requests.post(url, headers = header, files={"file": open("invoice.html", 'rb')})
对于那些从谷歌博士偶然发现这一点的人来说:
http = urllib3.PoolManager()
with open("invoice.html", "rb") as f:
file = f.read()
payload={
'attachment[file]':('invoice.html',file,'text/html')
}
r = http.request('post', url, headers = header, fields = payload)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.