使用tornado httpclient的异步库AsyncHTTPClient构建中转接口

简介:

      我这里简单的描述一下中转接口,因为权限和各种的限制导致不是所以人都可以查询想要的信息,比如他的资产。然而我这边也不能直接从库里面查询,也是要通过rest的模式去访问。

       其实不用说的那么多,大家做平台开发的时候,一定会遇到去访问远端的数据,如果你用tornaod的话,就可以用httpclient的异步模式了。

       简单说下,什么是httpclient包? httpclient包是tornaod自带的http客户端,你可以相称curl和urllib2,他们有的功能httpclient也都有的。


更多文章请关注我的个人站点, xiaorui.cc


tornado的httpclient包,包含了两个模块,一个是同步的,一个是异步的。


http_client = AsyncHTTPClient()

这个是异步非阻塞的 http客户端, 这种方法需要提供 callback,当然他的异步是在tornado的体系里面体现出来的。


http_client = httpclient.HTTPClient()

这个同步阻塞的 http客户端, 这个完全就是同步的,也就是说,他堵塞了后,别人就不能在访问了。



这里简单说下他的用法:


用法很简单,这里的handle_reques是回调,也就是说,我访问了后产生了io堵塞,我会扔到后面,他自己搞定了后,直接会去调用handle_request的函数。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
import  tornado.ioloop
from tornado.httpclient  import  AsyncHTTPClient
def handle_request(response):
     '' 'callback needed when a response arrive' ''
     if  response.error:
         print  "Error:" , response.error
     else :
         print  'called'
         print response.body
http_client = AsyncHTTPClient() # we initialize our http client instance
http_client.fetch( "http://xiaorui.cc" , handle_request) # here we  try
                     # to fetch an url and delegate its response to callback
tornado.ioloop.IOLoop.instance().start() # start the tornado ioloop to
                     # listen  for  events


大家可以多加上几个访问很慢的网站或者是根本不能访问的网站测试下。


wKiom1NJDDqRUow_AAIogRsu6Mg978.jpg


1
2
3
4
5
6
7
8
9
10
11
12
13
14
#xiaorui.cc
import  tornado.ioloop
from tornado.httpclient  import  AsyncHTTPClient
def handle_request(response):
     '' 'callback needed when a response arrive' ''
     if  response.error:
         print  "Error:" , response.error
     else :
         print  'called'
         print response.body
http_client = AsyncHTTPClient()
for  in  range( 10 ):                                                
     http_client.fetch( "http://10.58.101.248/testsleep" , handle_request)
tornado.ioloop.IOLoop.instance().start()


wKiom1NJDMDgN8gPAAZFMOb60dU962.jpg


在服务端看到的日志是并发请求过来的。


大体的功能大家都了解了,现在说说用httpclient 常用的用法:


超时,这个很常用吧。


1
http_client.fetch( "http://www.youtube.com" ,request_timeout= 3 ,callback=self.on_fetch)


通过httpclient调用别人的接口,get post参数。

1
2
3
4
5
from tornado.httputil  import  url_concat
params = { "a" 1 "b" 2 }
url = url_concat( "http://xiaorui.cc/" , params)
http_client = AsyncHTTPClient()
http_client.fetch(url, request_callback_handler)


有些接口需要你提交当前的cookie通过

1
2
3
4
5
6
login_cookies = response.headers.get_list( 'Set-Cookie' )
request = httpclient.HTTPRequest(
         url= 'url' ,    #这里的url想要有东西就需要带着cookie
         method= 'GET' ,
         headers=self.__login_headers, #在这里携带cookie信息
)


好了,就说这么多了。





 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1394773,如需转载请自行联系原作者


相关文章
|
3月前
|
Java Apache
远程调用工具HttpClient工具类封装
java远程调用工具HttpClient工具类类封装
|
缓存 JSON API
XHttp2 一个功能强悍的网络请求库,使用RxJava2 + Retrofit2 + OKHttp进行组装
XHttp2 一个功能强悍的网络请求库,使用RxJava2 + Retrofit2 + OKHttp进行组装
669 0
XHttp2 一个功能强悍的网络请求库,使用RxJava2 + Retrofit2 + OKHttp进行组装
|
10月前
|
XML Java API
该丢弃 HttpClient 了,这款轻量级 HTTP 客户端 API 框架很强
一般情况下是后端提供接口,前端调用,解决需求,但是有的时候为了方便,复用别人的接口(网上的,公共的第三方接口(短信、天气等)),就出现了后端调用后端接口的情况。 此外,因为业务关系,要和许多不同第三方公司进行对接。这些服务商都提供基于http的api,但是每家公司提供api具体细节差别很大。
|
数据可视化 Java 物联网
java使用RestTemplate发送请求,调用EMQ X的api
java使用RestTemplate发送请求,调用EMQ X的api
141 0
|
Java
使用OkHttp3框架获取服务器数据
使用OkHttp3框架获取服务器数据
145 0
|
存储 前端开发 API
使用Tornado配合七牛云存储api来异步切分上传文件
在做七牛云的文件上传时,很多人有一个误区,就是以为是前端先上传到后台服务器,然后后台服务器再将文件上传到七牛云,这个逻辑本身没有问题,但是会遇到一个问题,如果是后台对接七牛,出一个接口,前端调用接口,先将图片传到后台,然后后台再上传七牛云,用的过程中发现,文件小的情况下还好,文件一旦到了几十兆甚至几百兆的时候就很慢,前端上传图片到后台需要一定时间,后端上传到七牛又需要一段时间,很是麻烦,所以逻辑应该是前端直接上传七牛,而后台只承担生成token和存储七牛云返回的hash的任务。
使用Tornado配合七牛云存储api来异步切分上传文件
|
安全 测试技术 Python
Tornado框架的异步代码单元支持同步获取URL在项目里实战的心得和方法
Tornado框架的异步代码单元支持同步获取URL在项目里实战的心得和方法
142 0
|
JSON Java 数据格式
Java基础—实现微服务模块接收Http请求回调数据
本文中详细介绍在微服务模块中实现接收公网Http请求数据回调接口说明。
795 0
Java基础—实现微服务模块接收Http请求回调数据
|
存储 JSON Dart
【Flutter】HTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 )(一)
【Flutter】HTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 )(一)
424 0
【Flutter】HTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 )(一)
|
Dart
【Flutter】HTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 )(二)
【Flutter】HTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 )(二)
269 0
【Flutter】HTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 )(二)