2013-06-25 21 views
14

Như đã đề cập trong tiêu đề, tôi muốn thực hiện yêu cầu GET không đồng bộ bằng phương thức fetch() của AsyncHTTPclient.Sử dụng cơn lốc xoáy.httpclient.AsyncHTTPClient.fetch() để thực hiện yêu cầu GET cùng với tham số

Nhưng, tôi không thể tìm ra nơi cung cấp thông số truy vấn.

Vì vậy, nói tôi muốn thực hiện yêu cầu

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

nơi để tôi cung cấp cho các ab? Cách duy nhất để làm điều này là bằng cách nối các tham số vào URL. Cụ thể, có cách nào để vượt qua một Dict sau đó được gắn vào URL bởi khung Tornado.

Trả lời

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: Tôi đã tìm thấy cơn lốc xoáy có chức năng riêng của nó cho điều đó, hãy cập nhật câu trả lời. – vartec

3

Bạn chỉ có thể bao gồm chúng trong 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 qua documentation sau đó tornado.httpclient.HTTPRequest đối tượng không cung cấp bất kỳ giao diện để cung cấp bộ biến tham số cho việc xây dựng một chuỗi truy vấn có thể được nối vào URL.

+0

Yeah, đó là sự thật. Nhưng hầu hết các khung công tác đều cung cấp cách để truyền các từ điển sau đó được nối vào URL. Chỉ muốn biết nếu Tornado có cơ sở như vậy – Hashken

4

Bạn có thể sử dụng lốc xoáy HTTPRequest cũng để tạo đối tượng yêu cầu và sau đó bạn có thể sử dụng httpclient với đối tượng yêu cầu làm thông số trong tìm nạp.

Link for tornado HTTPRequest doc

mẫu mã cho 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

Tôi nghĩ rằng từ khóa 'body' không thể được sử dụng với phương thức' GET', chỉ cần thử trong cơn lốc xoáy (4.1). – zhkzyth

+0

Trong mã url python3 đã chuyển sang 'urllib.parse'. Ví dụ: try: 'urllib.parse.urlencode ({'a': 123})' –