2013-06-25 8 views
14

Come menzionato nel titolo, voglio effettuare una richiesta GET asincrona utilizzando il metodo fetch() di AsyncHTTPclient.Utilizzo di tornado.httpclient.AsyncHTTPClient.fetch() per effettuare una richiesta GET insieme ai parametri

Tuttavia, non riesco a capire dove fornire i parametri della query.

Quindi, dire che voglio fare la richiesta

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

dove io la do il a e b? L'unico modo per farlo è aggiungendo i parametri all'URL. In particolare, c'è un modo per passare un Dict che poi viene aggiunto all'URL dal framework Tornado.

risposta

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: ho trovato che il tornado ha la sua funzione, aggiorna la risposta. – vartec

3

Si può semplicemente includere nella 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 attraverso documentation poi tornado.httpclient.HTTPRequest oggetto non fornisce alcuna interfaccia di fornire set variabile parametrizzato per costruire una stringa di query che può essere aggiunto alla URL.

+0

Sì, questo è vero. Ma la maggior parte dei framework fornisce un modo per passare i dizionari che vengono poi aggiunti all'URL. Volevo solo sapere se Tornado aveva una tale facilità – Hashken

4

È possibile utilizzare tornado HTTPRequest anche a fare richiesta di oggetto e quindi è possibile utilizzare il httpclient alla richiesta oggetto come parametro nel recupero.

Link for tornado HTTPRequest doc

Esempio di codice per 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

Penso che la parola chiave 'body' non possa essere usata con il metodo' GET', basta provare in tornado (4.1). – zhkzyth

+0

In python3 urlencode è stato spostato in 'urllib.parse'. Ad esempio: urllib.parse.urlencode ({'a': 123}) ' –

Problemi correlati