如果在别处得到回答,我道歉;我环顾四周,并没有找到明确的答案。
我想使用Tornado接受带有查询字符串参数的HTTP请求,使用这些参数调用NOAA Web服务来获取天气数据,处理/解析NOAA响应,然后将最终数据返回给用户。 / p>
我正在关注Tornado,因为我不能指望Web服务请求的延迟或可用性,我需要调用非阻塞。 (否则我只使用Django)
我还想确保我可以在NOAA请求上设置适当的超时,以便我可以在必要时放弃。
注意:我也愿意使用Twisted,虽然它似乎有更陡峭的学习曲线,我的需求感觉非常简单。 (我会在Node.js中这样做,但我更习惯于处理Python中的解析要求)
提前感谢任何能帮助我指明正确方向的人。
我将在完成后开源服务器流程,并将任何提供示例或RTFM链接的人员归功于相应的文档。
答案 0 :(得分:0)
我从项目中提取了代码示例。它并不完美,但它提供了如何使用Tornadp的AsyncHTTPClient的想法
@tornado.gen.engine
def async_request(self, callback, server_url, method=u'GET', body=None, **kwargs):
"""
Make async request to server
:param callback: callback to pass results
:param server_url: path to required API
:param method: HTTP method to use, default - GET
:param body: HTTP request body for POST request, default - None
:return: None
"""
args = {}
if kwargs:
args.update(kwargs)
url = '%s?%s' % (server_url, urlencode(args))
request = tornado.httpclient.HTTPRequest(url, method, body=body)
http = tornado.httpclient.AsyncHTTPClient()
response = yield tornado.gen.Task(http.fetch, request)
if response.error:
logging.warning("Error response %s fetching %s", response.error, response.request.url)
callback(None)
return
data = tornado.escape.json_decode(response.body) if response else None
callback(data)