为什么用HttpLib2呢?
比起HttpLib多出什么呢?
1.支持HTTP和HTTPS,当然在这里和httplib是一样的。
两者的文档都这样指出“Note HTTPS support is only available if the socket module was compiled with SSL support.”
是的,要依赖于编译选项
2.支持HTTP 1.1的 Keep-Alive特性,能够在同一个socket连接里使用并发的httprequest.
3.支持授权
support following :
-Basic
-Digest
-WSSE
-HMAC Digest
-Google Account Authentication
当然我觉得Basic和Digest就OK了,如果觉得保密性不够,那最好用HTTPS,这个防火墙也无法根据内容过滤。最近报道说HTTPS也被破解了。不知是怎么破解的?=,=
4.支持Cache
是的,缓存是很多机制都必有的功能,如果http的库没有包含http本身支持的缓存就太可惜了。
如下就能获取带有缓存的HTTP对象h,缓存则存储在当前环境的“.cache"目录下,够简单吧:)
import httplib2
h = httplib2.Http(".cache")
5.提供所有HTTP支持的方法,不只是GET和POST,还包括DELETE,CONNECT吧
6.自动通过”GET“方法,重定向3XX返回值
7.支持deflate和gzip两种资源压缩格式
那我们简单看一下怎么使用吧:
样例1:
import httplib2
#获取HTTP对象
h = httplib2.Http()
#发出同步请求,并获取内容
resp, content = h.request("http://www.soso.com/")
print resp
print content
print resp会现实返回头信息
print content 会显示”搜搜更懂你“相关内容。
带有Cache功能的请求:
h2 = httplib2.Http('.cache')
resp2,content2 = h2.request('http://www.baidu.com/')
print resp2
print content2
你就会得到”百度一下,你就知道“相关内容。
并且我们可以再".cache"目录下找到刚才访问的相关内容文件”www.baidu.com,,f03f5717616221de41881be555473a02“,是baidu.com的缓存文件,用记事本打开可知里面带偶内容和httprespond头信息。
怎么验证是否真正cache住了呢?
当然用baidu这个网页测试时,WireShark所捕捉的结果,每次都会有http请求,仔细分析看,返回的Expire信息是当前时间,即立即失效。
但当用”www.163.com“测试时,他的过期时间稍微长一些,大概5分钟吧。所以连续两次请求时,无法通过wireshark活的第二次请求内容,直接返回了cahce信息。
Http.request方法如下:
Http.request(uri[, method="GET", body=None, headers=None, redirections=DEFAULT_MAX_REDIRECTS, connection_type=None])
method默认是"GET",并且能指定其他header和最大重定向次数(上面说过httplib2支持自动重定向,但不能无限重定向啊,默认是5)
此外,可以通过add_credentials方法来增加授权用户名和密码,httplib2自动会通过解析repond,并处理HTTP 401 challenge。
Http.add_credentials(name, password[, domain=None])
当然,你可以尝试一下是否支持HTTPS,我们的样例当然是google.com了。
h3 = httplib2.Http(".cache")
h3.add_credentials('name', 'password')
resp3, content3 = h3.request("https://www.google.com",
"GET",headers={'content-type':'text/plain'} )
print resp3
print content3
可以通过add_credentials增加ssl的证书信息。
这里即可得到google.hk的网页信息,可见被重定向了。
then how to deal with cookie?
there is one simple solutin : http://www.testingreflections.com/node/view/5919
其他详见:http://httplib2.googlecode.com/hg/doc/html/index.html