来自tornado.httpclient.AsyncHTTPClient的PUT请求

时间:2012-09-21 20:24:29

标签: python tornado urllib

有没有办法在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))

现在它不发送尸体。

1 个答案:

答案 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)