為什麼用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 respprint content
print resp會現實返回頭資訊
print content 會顯示”搜搜更懂你“相關內容。
範例2:
帶有Cache功能的請求:
h2 = httplib2.Http('.cache')resp2,content2 = h2.request('http://www.baidu.com/')print resp2print 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])
範例3:
當然,你可以嘗試一下是否支援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 resp3print 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