2

我正在尝试使用DeepL API。在文档中,他们谈到了这样的 cURL 命令:

curl https://api.deepl.com/v2/document \
    -F "file=@mydoc.docx" \
    -F "auth_key=<your-api-key>" \
    -F "target_lang=DE"

我转换成requests这样。

import requests

files = {
    'file': ('mydoc.docx', open('mydoc.docx', 'rb')),
    'auth_key': (None, '<your-api-key>'),
    'target_lang': (None, 'DE'),
}

response = requests.post('https://api.deepl.com/v2/document', files=files)

奇怪的是,cURL 命令确实可以从命令行工作,但我无法让 Python 代码工作。服务器不断返回以下数据:

{'message': 'Invalid file data.'}

该文档明确指出

因为请求包含文件上传,所以它必须是包含 multipart/form-data 的 HTTP POST 请求。

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

4

1 回答 1

1

DeepL 支持团队回复了我,解决方案是指定文件的数据类型(在我的情况下text/plain)。所以请求应该是这样的:

import requests

files = {
    'file': ('mydoc.docx', open('mydoc.docx', 'rb'), 'text/plain'),
    'auth_key': (None, '<your-api-key>'),
    'target_lang': (None, 'DE')
}

response = requests.post('https://api.deepl.com/v2/document', files=files)
于 2019-09-18T07:10:06.957 回答