2013-06-25 5 views
14

제목에서 언급했듯이 AsyncHTTPClient의 fetch() 메소드를 사용하여 비동기 GET 요청을 만들고 싶습니다.tornado.httpclient.AsyncHTTPClient.fetch()를 사용하여 매개 변수와 함께 GET 요청 만들기

그러나 쿼리 매개 변수를 어디에 제공할지 알 수 없습니다.

따라서는,

http://xyz.com?a=1&b=2

어디 내가 ab주지 않는 내가 요청을 확인하고 싶은 말은? 이 작업을 수행하는 유일한 방법은 매개 변수를 URL에 추가하는 것입니다. 특히, Dict를 전달하는 방법이 있습니다. 그러면 Dorn이 Tornado 프레임 워크에 의해 URL에 추가됩니다.

답변

22
from tornado.httputil import url_concat 
params = {"a": 1, "b": 2} 
url = url_concat("http://example.com/", params) 

http_client = AsyncHTTPClient() 
http_client.fetch(url, request_callback_handler) 
+0

@ Karthik : 나는 토네이도가 그 자체의 기능을 가지고 있다고 대답했습니다. 답변을 업데이트하십시오. – vartec

3

당신은 단순히 URL에 포함 할 수 있습니다

def handle_request(response): 
    if response.error: 
     print "Error:", response.error 
    else: 
     print response.body 

http_client = AsyncHTTPClient() 
http_client.fetch("http://www.google.com/?q=tornado", handle_request) 

다음 tornado.httpclient.HTTPRequest 객체가 URL에 추가 할 수있는 쿼리 문자열을 구축하기위한 매개 변수 세트를 공급하기 위해 어떤 인터페이스를 제공하지 않습니다 documentation를 참고로하는 것에.

+0

에 대한

Link for tornado HTTPRequest doc

코드 샘플은 네, 사실입니다. 그러나 대부분의 프레임 워크는 URL에 추가되는 사전을 전달하는 방법을 제공합니다. 토네이도가 그런 시설을 가지고 있는지 알고 싶었습니다. – Hashken

4

당신은 요청 객체를 만들기 위해도의 HTTPRequest를 토네이도 사용할 수 있습니다 그리고 당신은 페치에서 매개 변수로 요청 객체로 HttpClient를 사용할 수 있습니다. 의 HTTPRequest

import tornado.httpclient 
import urllib 

url = 'http://example.com/' 
body = urllib.urlencode({'a': 1, 'b': 2}) 
req = tornado.httpclient.HTTPRequest(url, 'GET', body=body) 

# I have used synchronous one (you can use async one with callback) 
client = tornado.httpclient.HTTPClient() 

res = client.fetch(req) 
+0

'body'키워드는'GET' 메서드와 함께 사용할 수 없다고 생각합니다. 단지 토네이도에서 시도하십시오 (4.1). – zhkzyth

+0

python3에서 urlencode가'urllib.parse'로 옮겼습니다. 예 :'urllib.parse.urlencode ({ 'a : 123})' –

관련 문제