2012-09-21 100 views
2

有沒有什麼辦法可以在龍捲風httpclient中執行PUT請求?來自tornado.httpclient.AsyncHTTPClient的PUT請求

例如有什麼方法可以用Requests Library代替urllib

或者可能繼承自己的客戶端,並從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) 

任何無痛補丁,黑客,建議..

我想這個建設propertly工作:

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

現在它不發送正文。

+0

抱歉,但爲什麼使用urllib的,因爲你已經http://www.tornadoweb.org/documentation/httpclient.html –

+0

@AbdelouahabPp,用它在默認情況下龍捲風,如果我不想錯過什麼。 –

回答

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

看起來不錯,謝謝! =) –

+1

這需要測試。任何人測試,如果這個工程?或者有任何併發​​症? – tor9ado