一、是什么?
httplib2是一個功能強大的網絡請求庫,其實它和urllib、urllib、requests都是類似的庫,安裝庫
pip install httplib2
二、怎么用?
既然它和其他的請求庫類似那么就有着相似的方法,我們一條條來盤點下httplib2的強大方法!
1.基本請求
import httplib2 h = httplib2.Http('result') #獲取的內容寫入result目錄下 response, content = h.request('https://www.baidu.com/')
最后會在result文件夾下生成一個名字叫
這種的文件!可以使用記事本打開,里面會看見里面有這樣的內容
status: 200
accept-ranges: bytes
cache-control: no-cache
connection: Keep-Alive
content-length: 227
content-type: text/html
date: Thu, 29 Nov 2018 14:37:43 GMT
etag: "5bfcae80-e3"
last-modified: Tue, 27 Nov 2018 02:40:00 GMT
p3p: CP=" OTI DSP COR IVA OUR IND COM "
pragma: no-cache
server: BWS/1.1
set-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.com
strict-transport-security: max-age=0
x-ua-compatible: IE=Edge,chrome=1
content-location: https://www.baidu.com/
<html> <head> <script> location.replace(location.href.replace("https://","http://")); </script> </head> <body> <noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript> </body> </html>
基本的請求分成里兩部分
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 urllib import httplib2 from httplib2 import Http from urllib import urlencode h =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 urllib import httplib2 http = 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("http://www.baidu.com/")
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:最大的自動連續的重定向次數默認為5
7.httplib2的優點
httplib2,一個第三方的開源庫,它比http.client更完整的實現了HTTP協議,同時比urllib.request提供了更好的抽象。
python的HTTP庫不支持緩存,而httplib2支持。
Python的HTTP 庫不支持最后修改時間檢查,而httplib2 支持。
Python HTTP庫不支持ETag,而httplib2支持.
Python的 HTTP庫不支持壓縮,但httplib2支持。
httplib2 幫你處理了永久重定向。它不僅會告訴你發生了永久重定向,而且它會在本地記錄這些重定向,並且在發送請求前自動重寫為重定向后的URL。
作者:Wangthirteen
鏈接:https://www.jianshu.com/p/1df0a1080c60
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。