基礎庫httplib2


一、是什么?

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文件夾下生成一個名字叫

www.baidu.com,e81c1f5749545c5f7d247b3a100ffe62

這種的文件!可以使用記事本打開,里面會看見里面有這樣的內容

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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM