tornado.httpclient.AsyncHTTPClient: tornad提供的异步web请求客户端,用来进行异步web请求
fetch(request,callback=None):用于执行一个web请求,并异步响应返回一个tornado.httpclient.HTTPResponse
request 可以是一个url,也可以是一个tornado.httpclient.HTTPRequest
HTTPRequest:HTTP请求类,该类的构造函数可以接收参数
url: 要访问的网址,字符串类型
method: HTTP请求方式, 字符串类型
headers: 附加的协议头,字典或者HTTPHeaders
body: HTTP请求体
HTTPResponse:HTTP响应类
code: 状态码
reason: 状态码描述
body: 响应数据
error: 异常
tornado异步请求(连接数据库等耗时操作):第一种协程方法1
装饰器:@tornado.gen.coroutine:协程异步请求装饰器
@tornado.web.asynchronous:异步请求装饰器
class Students3Handler(RequestHandler): @tornado.gen.coroutine def get(self, *args, **kwargs): res = yield self.getData() self.redirect(res["ret"]) @tornado.gen.coroutine def getData(self): url = "http://www.baidu.com" client = AsyncHTTPClient() res = yield client.fetch(url) if res.error: ret = {"ret": 0} else: ret = {"ret":url} raise tornado.gen.Return(ret)
第一种协程方法2
@tornado.gen.coroutine def get(self, *args, **kwargs): url = r"http://www.baidu.com" client = AsyncHTTPClient() res = yield client.fetch(url) if res.error: self.send_error(500) else: self.redirect(url)
第二种回调函数:
class StudentsHandler(RequestHandler): def on_response(self,response): if response.error: self.send_error(500) else: self.render("www.baidu.com") @tornado.web.asynchronous def get(self, *args, **kwargs): client = AsyncHTTPClient() url = r"www.baidu.com" client.fetch(url,callback=self.on_response) self.write("ok")