本文共 3275 字,大约阅读时间需要 10 分钟。
httplib2是一个功能强大的网络请求库,其实它和urllib、urllib、requests都是类似的库,安装库
pip install httplib2
既然它和其他的请求库类似那么就有着相似的方法,我们一条条来盘点下httplib2的强大方法!
1.基本请求
import httplib2h = httplib2.Http('result') #获取的内容写入result目录下response, content = h.request('https://www.baidu.com/')
最后会在result文件夹下生成一个名字叫
这种的文件!可以使用记事本打开,里面会看见里面有这样的内容
status: 200accept-ranges: bytescache-control: no-cacheconnection: Keep-Alivecontent-length: 227content-type: text/htmldate: Thu, 29 Nov 2018 14:37:43 GMTetag: "5bfcae80-e3"last-modified: Tue, 27 Nov 2018 02:40:00 GMTp3p: CP=" OTI DSP COR IVA OUR IND COM "pragma: no-cacheserver: BWS/1.1set-cookie: BD_NOT_HTTPS=1; path=/; Max-Age=300, BIDUPSID=4164BB9449141E2F6F953DED296ECE6E; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, PSTM=1543502263; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.comstrict-transport-security: max-age=0x-ua-compatible: IE=Edge,chrome=1content-location: https://www.baidu.com/
基本的请求分成里两部分
1.创建Http对象,因为需要一个Http类型的对象 2.就是进行基本的POST/GET请求 而我们返回的内容分为两部分,一部分就是response包含的服务器返回的HTTP报头的内容,200表示请求成功,另一部分是Content里面包含的内容,也就是HTML页面,是服务器返回的实际数据2.缓存
HTTPlib2有一个和其他的请求库不同的东西,我感觉还挺有意思,叫缓存,是的就是你想的那样,在一个默认的时间里你的同样的请求不会真的被发送到服务器,而是读取本地的缓存来返回给你!httplib2库默认是启用缓存,你可以设置不用缓存
response2, content2 = h.request('http://www.baidu.com/', headers={'cache-control':'no-cache'})
添加
headers={'cache-control':'no-cache'}
httplib2注意到我们添加了无缓存标头, 因此它完全绕过了它的本地缓存, 然后就会打开网络请求数据
3.提交表单
import urllibimport httplib2from httplib2 import Httpfrom urllib import urlencodeh =httplib2.Http()#创建Http对象data = dict(name="Joe", comment="A test comment")#准备添加的数据response, content = h.request("http://www.baidu.com/", "POST", urlencode(data))#urlencode()#提交数据print(response){'status': '200', 'transfer-encoding': 'chunked', 'vary': 'Accept-Encoding,User-Agent', 'server': 'Apache', 'connection': 'close', 'date': 'Tue, 31 Jul 2007 15:29:52 GMT', 'content-type': 'text/html'}
提交的data为字典类型
4.设置cookie
其他的请求库都能设置cookie,httplib2当然也能,代码如下
import urllibimport httplib2http = httplib2.Http()url = 'http://www.baidu.com/' body = {'USERNAME': 'foo', 'PASSWORD': 'bar'}#账号和密码headers = {'Content-type': 'application/x-www-form-urlencoded'}response, content = http.request(url, 'POST', headers=headers, body=urllib.urlencode(body))headers = {'Cookie': response['set-cookie']} ###将获得cookie设置到请求头中,以备下次请求使用url = 'http://www.baidu.com/' response, content = http.request(url, 'GET', headers=headers) ##本次请求就不用带用户名和密码
5.设置代理
import httplib2
import socks ##需要第三方模块httplib2.debuglevel=4
h = httplib2.Http(proxy_info = httplib2.ProxyInfo(socks.PROXY_TYPE_HTTP, 'localhost', 8000)) response,content = h.request("")6.request其他参数
Http.request(self, uri, method='GET', body=None, headers=None, redirections=5, connection_type=None)
执行单次的http请求 uri:一个以'http' 或 'https'开头的资源定位符字串,必须是一个绝对的地址 method:支持所有的http请求方式。如: GET, POST等 body:请求的附件数据,一个经过urllib.urlencode编码的字符串 headers:请求头信息,字典类型 redirections:最大的自动连续的重定向次数默认为57.httplib2的优点
httplib2,一个第三方的开源库,它比http.client更完整的实现了HTTP协议,同时比urllib.request提供了更好的抽象。
python的HTTP库不支持缓存,而httplib2支持。 Python的HTTP 库不支持最后修改时间检查,而httplib2 支持。 Python HTTP库不支持ETag,而httplib2支持. Python的 HTTP库不支持压缩,但httplib2支持。 httplib2 帮你处理了永久重定向。它不仅会告诉你发生了永久重定向,而且它会在本地记录这些重定向,并且在发送请求前自动重写为重定向后的URL。
转载地址:http://bzwsi.baihongyu.com/