2

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

例如,有什么方法可以替换urllibRequests Library

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

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

现在它不是发送身体。

4

1 回答 1

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)
于 2012-09-22T07:25:03.043 回答