来自tornado.httpclient.AsyncHTTPClient的PUT请求

Nik*_*nyh 2 python tornado urllib

在tornado httpclient中有没有办法执行PUT请求?

例如有没有更换任何方式urllib请求库

或者也许是子类自己的客户端并从这个答案注入构造:

import urllib2
opener = urllib2.build_opener(urllib2.HTTPHandler)
request = urllib2.Request('http://example.org', data='your_put_data')
request.add_header('Content-Type', 'your/contenttype')
request.get_method = lambda: 'PUT'
url = opener.open(request)
Run Code Online (Sandbox Code Playgroud)

任何无痛的补丁,黑客,建议..

我希望这种结构能够有效地工作:

 response = yield gen.Task(http_client.fetch, opt.site_url + '/api/user/', method="PUT", body=urlencode(pdata))
Run Code Online (Sandbox Code Playgroud)

现在它不发送身体.

Col*_*ean 6

不,Tornado不使用urllib(可能是它阻止).使用httpclient进行比基本GET更复杂的操作的技巧是创建HTTPRequest.

未经测试,但应该工作:

from tornado.httpclient import HTTPRequest
request = HTTPRequest(opt.site_url + '/api/user/', method="PUT", body=urlencode(pdata))
response = yield gen.Task(http_client.fetch, request)
Run Code Online (Sandbox Code Playgroud)