2013-06-25 8 views
14

Jak wspomniano w tytule, chcę wykonać asynchroniczne żądanie GET za pomocą metody fetch() AsyncHTTPclient.Użycie tornado.httpclient.AsyncHTTPClient.fetch() do wykonania żądania GET wraz z parametrami

Ale, nie mogę dowiedzieć się, gdzie podać parametry zapytania.

więc powiedzieć, że chcą przeprowadzenia żądania

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

gdzie mogę dać a i b? Jest to jedyny sposób, aby to zrobić, dołączając parametry do adresu URL. Konkretnie, czy istnieje sposób na przekazanie Dict, który następnie zostaje dołączony do adresu URL przez framework Tornado.

Odpowiedz

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: Odkryłem, że tornado ma swoją własną funkcję, zaktualizuj odpowiedź. – vartec

3

można po prostu włączyć je w adresie 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) 

reffering przez documentation następnie tornado.httpclient.HTTPRequest obiekt nie przewiduje żadnych interfejsów dostarczyć parametryczne zmienny zestaw do budowania ciąg kwerendy, które mogą być dołączone do adresu URL.

+0

Tak, to prawda. Jednak większość frameworków zapewnia sposób przekazywania słowników, które są następnie dołączane do adresu URL. Chciałem tylko wiedzieć, czy Tornado miał taki obiekt. – Hashken

4

Można użyć tornado HTTPRequest również dokonać kupna przedmiotu, a następnie można użyć httpclient z życzeniem obiektu jako parametr w sprowadzić.

Link for tornado HTTPRequest doc

przykładowy kod dla 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

Myślę, że słowo kluczowe 'body' nie może być używane z metodą" GET ", po prostu spróbuj w tornado (4.1). – zhkzyth

+0

W python3 urlencode został przeniesiony do 'urllib.parse'. Np spróbować: 'urllib.parse.urlencode ({'a': 123})' –

Powiązane problemy