使用基于Python的Tornado框架的HTTP客户端的教程
|
由于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 tornadohttpclient python setup.py install 教程 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 TornadoHTTPClient
http = 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 TornadoHTTPClient
http = 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 TornadoHTTPClient
http = 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 TornadoHTTPClient
http = 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 TornadoHTTPClient
http = 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 TornadoHTTPClient
http = 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 TornadoHTTPClient
http = 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 TornadoHTTPClient
http = 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 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
