开发者社区> 技术小胖子> 正文

使用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,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
18052 0
关于接口测试——自动化框架的设计与实现
一、自动化测试框架 在大部分测试人员眼中只要沾上“框架”,就感觉非常神秘,非常遥远。大家之所以觉得复杂,是因为落地运用起来很复杂;每个公司,每个业务及产品线的业务流程都不一样,所以就导致了“自动化测试框架”去完成自动化测试的时候产生很多不稳定因素,这样就很难定位成一个固定的框架。
6521 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
23584 0
查询对账单下载地址接口(alipay.data.dataservice.bill.downloadurl.query)测试之“入参不合法”
这个接口是下载离线账单的,需要T+1天生成账单,不能查询当日或者是当月的账单,如果日期是当天或者是当月的会返回“参数不合法”; 详情请点击查看文档  下载对账单地址接口只有当面付接口可以下载trade类型的账单,其他支付接口只能下载signcustomer这个类型的  代码示例: package com.
959 0
Spring Cloud Alibaba基础教程:使用Sentinel实现接口限流
Nacos作为注册中心和配置中心的基础教程,到这里先告一段落,后续与其他结合的内容等讲到的时候再一起拿出来说,不然内容会有点跳跃。接下来我们就来一起学习一下Spring Cloud Alibaba下的另外一个重要组件:Sentinel。
2812 0
21117
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载