tornado.httpclient AsyncHTTPClient()python3

时间:2017-06-24 16:59:00

标签: python python-3.x tornado asynchttpclient

我有一个奇怪的问题,我希望有人遇到它。 我正在使用TelegramAPI,我想使用POST文件 多部分/格式的数据。文件大小32K

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

使用简单的请求 python lib我没有问题:

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

BUT

当我尝试使用

http_client = httpclient.AsyncHTTPClient() 

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

使用相同的图片

我收到了错误

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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