香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > python >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

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


时间:2021-11-29 16:22 作者:admin


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

TornadoHTTPClient 是一个基于Tornado的高效的异步HTTP客户端库, 支持Cookie和代理, 目前仅在python/' target='_blank'>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", callback = callback, args = (times + 1, ), delay = 10)  else:    http.stop()http.get("http://www.linuxzen.com", callback = callback, 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

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)