相当于cURL返回错误的请求

相当于cURL返回错误的请求,curl,post,python-requests,deepl,Curl,Post,Python Requests,Deepl,我正试着用这个。在文档中,他们提到了这样一个cURL命令: curlhttps://api.deepl.com/v2/document \ -F“file=@mydoc.docx”\ -F“验证密钥=”\ -F“target_lang=DE” 我把它转换成了请求,就像这样 导入请求 文件={ '文件':('mydoc.docx',打开('mydoc.docx','rb'), “验证密钥”:(无、), “target_lang”:(无,'DE'), } response=requests.pos

我正试着用这个。在文档中,他们提到了这样一个cURL命令:

curlhttps://api.deepl.com/v2/document \
-F“file=@mydoc.docx”\
-F“验证密钥=”\
-F“target_lang=DE”
我把它转换成了
请求
,就像这样

导入请求
文件={
'文件':('mydoc.docx',打开('mydoc.docx','rb'),
“验证密钥”:(无、),
“target_lang”:(无,'DE'),
}
response=requests.post('https://api.deepl.com/v2/document,files=files)
奇怪的是,cURL命令确实可以从命令行运行,但我无法让Python代码运行。服务器不断返回以下数据:

{'message':'Invalid file data.}
文件明确指出

因为请求包含文件上载,所以它必须是包含多部分/表单数据的HTTP POST请求


但据我所知,上述方法是正确的。我做错了什么?

DeepL支持团队找到了我,解决方案是指定文件的数据类型(在我的例子中是
text/plain
)。因此,请求应如下所示:

导入请求
文件={
'文件':('mydoc.docx',打开('mydoc.docx','rb'),'text/plain'),
“验证密钥”:(无、),
‘target_lang’:(无‘DE’)
}
response=requests.post('https://api.deepl.com/v2/document,files=files)

hmm,既然您必须以读取二进制文件的方式打开
mydoc
,您是否需要将字符串改为字节发送?比如对于
target\u lang
使用
b'DE'
来代替?@supersew我试过了,但是没有用。我建议您首先尝试使用类似于postman的工具来转换请求,然后您可能会在此处找到有关python多部分请求的所有信息:您是否尝试过打开该文件进行读写操作?看起来,在您上传文件后,DeepL服务器会对其进行加密;不确定他们是如何做到的,但有可能他们同时尝试读取和写入文件。尝试
rb+
而不是
rb
@KaylaFuchs尝试过,但没有改变。