Python的Requests库为PDF添加了标签,从而打破了API

时间:2017-05-01 13:18:09

标签: python pdf python-requests

我正在使用Python的Requests库将PDF发布到文档存储,然后在签名过程中使用上传的PDF。但是,使用Python(而不是CURL)上载PDF时,签名环境无法正常工作。在比较不同的文件时,我发现Requests将一些数据添加到PDF中:

--ca9a0d04edf64b3395e62c72c7c143a5
Content-Disposition: form-data; name="LoI.pdf"; filename="LoI.pdf"

%%Original PDF goes here%%

--ca9a0d04edf64b3395e62c72c7c143a5--

这些数据被不同的PDF阅读器完全接受,但不是由Signature API接受。有没有办法阻止请求将此数据添加到PDF?我使用了以下代码:

myfile = request.FILES['myfile']
url = %%documentstoreURL%%
resp = requests.request('post', url, files={myfile.name:myfile}, headers={'Content-Type':'application/pdf'}, auth=(%%auth details%%))

谢谢!

2 个答案:

答案 0 :(得分:0)

您使用curl将文件作为二进制数据发送,但将其附加到请求中。

我阅读了源代码,我相信resp = requests.request('post', url, data={myfile.name:myfile}, headers={'Content-Type':'application/pdf'}, auth=(%%auth details%%))data而非files)将避免多部分编码。

至少应该有所不同。

答案 1 :(得分:0)

在正确的指导下,我找到了一个基于Python requests - POST data from a file

的工作解决方案

最后我做了如下:

 myfile = request.FILES['myfile']
 payload = request.FILES['myfile'].read()
 headers = {'content-type': 'application/pdf'}
 url = "%%DocumentServiceURL"
 r = requests.post(url, auth=(%%auth_details%%), data=payload, verify=False, headers=headers)