2017-06-24 13 views
0

私は奇妙な問題があり、誰かが遭遇したことを願っています。 私はTelegramAPIで作業しています。私は multipart/form-dataを使ってPOSTファイルにします。私は同じ絵でtornado.httpclient AsyncHTTPClient()python3

http_client = httpclient.AsyncHTTPClient() 

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

を使用しようとすると

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

しかし

:私は何の問題もないシンプルな要求のpythonのlibを使用してファイルサイズ32K

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

私はなぜ知らないエラー

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

を得ましたか。 リクエストはうまく動作しますが、AsyncHTTPClientは役に立ちません。

答えて

1

demoコードを確認してください。ファイルをアップロードする方法の例が表示されます。

1

TornadoのHTTPクライアントでの引数bodyは、の引数がrequestsに似ています。 files引数は完全に別のものです。multipartエンコーディングを使用してファイルをエンコードします。どちらを使いたいかは、サーバーが期待している形式によって異なります。

この場合、サーバーはURLエンコーディングではなく、multipartのエンコーディングを想定しています。 Tornadoにはmultipartエンコーディングを生成するための組み込みサポートがありませんが、Vitalieはもう1つの答えでthis example codeがこれを行う方法を示しています。