有没有办法在tornado httpclient中执行PUT请求?
例如,是否有任何方法可以将urllib
替换为Requests Library?
或者也许是子类自己的客户端并从this回答注入构造:
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)
任何无痛的补丁,黑客,建议..
我希望这种结构能够有效地运作:
response = yield gen.Task(http_client.fetch, opt.site_url + '/api/user/', method="PUT", body=urlencode(pdata))
现在它不发送尸体。
答案 0 :(得分: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)