使用tornado.httpclient.AsyncHTTPClient.fetch()与参数一起发出GET请求

时间:2013-06-25 08:49:25

标签: asynchronous get tornado

如标题中所述,我想使用AsyncHTTPclient的fetch()方法发出异步GET请求。

但是,我无法弄清楚在哪里提供查询参数。

所以,说我想提出请求

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

我在哪里提供ab?唯一的方法是将参数附加到URL。具体来说,有没有办法传递一个Dict,然后由Tornado框架附加到URL。

3 个答案:

答案 0 :(得分:24)

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)

答案 1 :(得分:4)

您也可以使用tornado HTTPRequest创建请求对象,然后您可以将带有请求对象的httpclient用作fetch中的参数。

Link for tornado HTTPRequest doc

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)

答案 2 :(得分:3)

您只需将它们包含在网址中即可:

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)

通过documentation然后tornado.httpclient.HTTPRequest对象,不提供任何接口来提供参数化变量集,以构建可附加到URL的查询字符串。