使用基于Python的Tornado框架的HTTP客户端的教程

使用基于Python的Tornado框架的HTTP客户端的教程,第1张

概述由于tornado内置的AsyncHTTPClient功能过于单一,所以自己写了一个基于Tornado的HTTP客户端库,鉴于自己多处使用了这个库,所以从项目中提取出来,写成一个单独库tornadohttpclient

由于tornado内置的AsynchttpClIEnt功能过于单一,所以自己写了一个基于Tornado的http客户端库,鉴于自己多处使用了这个库,所以从项目中提取出来,写成一个单独库 tornadohttpclIEnt

TornadohttpClIEnt 是一个基于Tornado的高效的异步http客户端库,支持cookie和代理,目前仅在Python2.7平台上测试过,不支持python3

听取了仙子君的意见,直接对tornado.curl_httpclIEnt.CurlAsynchttpClIEnt进行封装
安装

首先从git clone 下代码

git clone https://github.com/coldnight/tornadohttpclIEnt.git

然后安装它

cd tornadohttpclIEntpython setup.py install

教程
GET

TornadohttpClIEnt的get方法可以发起一个get请求

from tornadohttpclIEnt import TornadohttpClIEnt# 实例化http = TornadohttpClIEnt()# 发出get请求http.get("http://www.linuxZen.com")# 开始主事件循环http.start()

POST

TornadohttpClIEnt的post方法可以发起一个post请求
读取响应

上面仅仅发出了请求,但是我们无法读取GET请求回来的数据,我们可以使用一个回调来读取响应

from tornadohttpclIEnt import TornadohttpClIEnthttp = TornadohttpClIEnt()def callback(response):  print response.body  http.stop()http.get("http://www.linuxZen.com",callback = callback)http.start()

通过callback关键字参数我们可以传进一个回调函数,当请求成功时会调用此函数,并给此函数传递一个与urllib2.urlopen返回一样的reponse实例
上传文件

upload方法可以上传文件,其接受一个url和文件的fIEld和文件路径,还有其他post参数

from tornadohttpclIEnt import TornadohttpClIEnthttp = TornadohttpClIEnt()def callback(response):  print("打开图片链接",end = " ")  print(response.effective_url)  http.stop()http.upload("http://paste.linuxZen.com","img","img_test.png",callback = callback)http.start()

给callback传递参数

有时候callback可能需要访问局部变量,可以通过 args和kwargs关键字参数,将callback的参数传递给get/post方法,args参数将会在response参数之后被传递,args参数类型应当是一个元组,kwargs参数类型应当是一个字典

from tornadohttpclIEnt import TornadohttpClIEnthttp = TornadohttpClIEnt()def callback(response,times):  print response.body  print times  if times == 9:    http.stop()for i in range(10):  http.get("http://www.linuxZen.com",callback = callback,args = (i,))http.start()

发送延迟请求

有时我们需要延迟几秒也发送请求或每隔几秒就发送一个请求,get/post方法的delay关键字参数可以解决,delay参数接受一个单位为秒的数字,并延迟delay秒后发起请求

from tornadohttpclIEnt import TornadohttpClIEnthttp = TornadohttpClIEnt()def callback(response,times):  print response.body  if times < 9:    # 延迟10秒发送此请求    http.get("http://www.linuxZen.com",args = (times + 1,),delay = 10)  else:    http.stop()http.get("http://www.linuxZen.com",args = (1,))http.start()

给请求传递参数

TornadohttpClIEnt 的 get/post方法的第二个参数params可以定义请求时传递的参数params的类型为字典或者((key,value),)类型的元组或列表,例如使用百度搜索TornadohttpClIEnt

from tornadohttpclIEnt import TornadohttpClIEnthttp = TornadohttpClIEnt()def callback(response):  print response.body  http.stop()http.get("http://www.baIDu.com/s",(("wd","tornado"),callback = callback)http.start()

以上也使用与POST方法,比如登录网站

from tornadohttpclIEnt import TornadohttpClIEnthttp = TornadohttpClIEnt()def callback(response):  print response.body  http.stop()http.post("http://ip.or.domain/login",(("username","cold"),("password","pwd")),callback = callback)http.start()

指定http头

TornadohttpClIEnt 的get/post方法的 headers关键字参数可以自定额外的http头信息,参数类型为一个字典

指定User-Agent头

from tornadohttpclIEnt import TornadohttpClIEnthttp = TornadohttpClIEnt()def callback(response):  print response.body  http.stop()headers = dict((("User-Agent","Mozilla/5.0 (X11; linux x86_64)"\        " AppleWebKit/537.11 (KHTML,like Gecko)"\        " Chrome/23.0.1271.97 Safari/537.11"),))http.get("http://www.linuxZen.com",headers=headers,callback = callback)

使用代理

TornadohttpClIEnt 的set_proxy方法可以设置代理,其接受两个参数,分别是代理的 主机名/ip 代理的端口,unset_proxy可以取消代理

from tornadohttpclIEnt import TornadohttpClIEnthttp = TornadohttpClIEnt()def callback(response):  print response.body  http.unset_proxy()  http.stop()http.set_proxy("127.0.0.1",8087)http.get("http://shell.appspot.com",callback = callback)http.start()

cookie

TornadohttpClIEnt会自动记录和装载cookie,可以通过 TornadohttpClIEnt实例属性 cookie 获取cookie

总结

以上是内存溢出为你收集整理的使用基于Python的Tornado框架的HTTP客户端的教程全部内容,希望文章能够帮你解决使用基于Python的Tornado框架的HTTP客户端的教程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1202866.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存