tornado.httpclient AsyncHTTPClient() python3

tornado.httpclient AsyncHTTPClient() python3

我有一个奇怪的问题,我希望有人遇到过它。 我正在使用 TelegramAPI,我想使用 POST 文件 multipart/form-data。文件大小 32K

data = {'photo': open('test.jpg', 'rb').read()}

使用简单的 requests python lib 我没问题:

res = requests.post(url, files=data)

但是

当我尝试使用

http_client = httpclient.AsyncHTTPClient() 

http_client.fetch(url, method='POST', body=urllib.parse.urlencode(data))

同图

我收到一个错误

tornado.httpclient.HTTPError: HTTP 413: Request Entity Too Large

不知道为什么? requests 工作正常,但 AsyncHTTPClient 不行,请帮助我

请查看此 demo 代码。您将看到有关如何上传文件的示例。

Tornado 的 HTTP 客户端中的 body 参数类似于 requests 中的 data 参数。 files 参数完全不同:它使用 multipart 编码对文件进行编码。您要使用哪一个取决于服务器期望的格式。

在这种情况下,服务器需要 multipart 编码,而不是 URL 编码。 Tornado 没有对生成 multipart 编码的内置支持,但正如 Vitalie 在另一个答案中所说,this example code 展示了如何做到这一点。