# 高級用法
# 一过椎,會話對象
#創(chuàng)建一個會話對象仲闽,會話對象讓你能夠跨請求保持某些參數(shù)献宫。
# 一涌攻、在兩個請求間使用會話保持一些 cookie逗概,兩個請求都可以使用。
# s1 = requests.Session()
# print s1.get('http://httpbin.org/cookies/set/sessioncookie/123456789').text
# print s1.get("http://httpbin.org/cookies").text
# 二袁波、方法級別的參數(shù)也不會被跨請求保持耻蛇。例如第一個請求方法帶的參數(shù)cookies在第二個請求方法中不能使用,即使請求的是同一個地址朝蜘。
# s2 = requests.Session()
# response = s2.get('http://httpbin.org/cookies', cookies={'test_cookie':"timeashore"})
# print response.text
# response = s2.get('http://httpbin.org/cookies')
# print response.text
# 三恶迈、會話也可用來為請求方法提供缺省數(shù)據(jù)。
# s = requests.Session()
# s.auth = ('user', 'pass')
# s.headers.update({'x-test': 'true'})
# print s.get('http://httpbin.org/headers', headers={'x-test2': 'true',"Content-Length":"None"}).headers
# 會話也可以這樣使用:先打開文件一樣創(chuàng)建一個會話對象s谱醇,然后再進行操作暇仲,這樣在with塊退出后會話將會被關(guān)閉
# with requests.Session() as s:
# s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
# 從字典參數(shù)中移除一個值也很簡單步做,在方法層的字典參數(shù)中將那個鍵設(shè)置為None即可。
# 三奈附、發(fā)出請求后收到服務(wù)器的響應(yīng)response中的內(nèi)容
# response = requests.get("http://www.baidu.com")
# 主要做了兩件事:
# (1)創(chuàng)建一個Request對象辆床,發(fā)送Request對象到服務(wù)器。(發(fā)請求)
# (2)創(chuàng)建一個Response對象接收服務(wù)器響應(yīng)內(nèi)容(包括服務(wù)器返回的所有信息桅狠,也包括創(chuàng)建的Request對象信息)
# 訪問response頭信息:
# print response.headers
# 訪問請求頭信息
# print response.request.headers
# 四讼载、SSL證書驗證 - 客戶端證書 - CA證書
# Requests 可以為 HTTPS 請求驗證 SSL 證書,就像 web 瀏覽器一樣中跌。
# SSL 驗證默認(rèn)是開啟的( 參數(shù)verify默認(rèn)為True)咨堤,如果證書驗證失敗,Requests 會拋出 SSLError漩符。
# print requests.get('https://github.com', verify=True)
# 也可以為 verify 傳入 CA_BUNDLE 文件的路徑一喘,或者包含可信任 CA 證書文件的文件夾路徑
# print requests.get('https://github.com', verify='/path/to/certfile')
# CA證書:Requests 默認(rèn)附帶了一套它信任的根證書,來自于 Mozilla trust store嗜暴。
# 五凸克、響應(yīng)體內(nèi)容工作流
# 默認(rèn)情況下,當(dāng)發(fā)請求后闷沥,響應(yīng)體(response.text,response.content,response.body,...)會立即被下載萎战。
# 但是可以設(shè)置 stream=True 參數(shù)推遲下載時間,直到訪問到了某一個內(nèi)容才會被下載舆逃。此時僅有響應(yīng)頭被下載下來了蚂维,連接保持打開狀態(tài)。
# response = requests.get("http://www.baidu.com", stream=True) #響應(yīng)體暫未下載
# print response.text #響應(yīng)體下載
# 注意:如果你在請求中把 stream 設(shè)為 True路狮,Requests 無法將連接釋放回連接池虫啥,除非你 消耗了所有的數(shù)據(jù),或者調(diào)用了 Response.close奄妨。
# 因此在設(shè)置了stream參數(shù)為True時涂籽,最好在with塊中發(fā)請求操作,這樣保證請求一定會被關(guān)閉砸抛。
# with requests.get("http://www.baidu.com",stream=True) as response:
# print response.content
# 六评雌、流式上傳
# Requests支持流式上傳,這允許你發(fā)送大的數(shù)據(jù)流或文件而無需先把它們讀入內(nèi)存锰悼。
# 要使用流式上傳柳骄,僅需為你的請求體提供一個類文件對象即可:
# with open('massive-body') as fp:
# requests.post(url, data=fp)
# 警告:強烈建議你用二進制模式(binary mode)打開文件团赏。
# 這是因為 requests 可能會為你提供 header 中的 Content-Length箕般,在這種情況下該值會被設(shè)為文件的字節(jié)數(shù)。
# 如果你用文本模式打開文件舔清,就可能碰到錯誤丝里。
# (比較有用)
# 七曲初、事件掛鉤 : 可以用來操控部分請求過程,或信號事件處理
# 傳遞一個字典給 hooks 請求參數(shù)為每個請求分配一個鉤子函數(shù)
# def a(response,*args, **kwargs):
# #對于爬蟲杯聚,可以在這個回調(diào)函數(shù)中解析源碼提取內(nèi)容
# print response.text
# def b(response,*args, **kwargs):
# print response.text
# print response.encoding
# requests.get("http://www.baidu.com",hooks=dict(response=a)) #設(shè)置回調(diào)函數(shù)a()
# requests.get("http://www.baidu.com",hooks=dict(response=b)) #設(shè)置回調(diào)函數(shù)b()
# 八臼婆、代理
#(1)如果需要使用代理,通過為任意請求方法設(shè)置 proxies 參數(shù)來配置
# proxie = {
# "http": "http://10.10.1.10:3128",
# "https": "http://10.10.1.10:1080",
# }
# requests.get(url, proxies=proxie)
# (2)也可以通過環(huán)境變量 HTTP_PROXY 和 HTTPS_PROXY 來配置代理幌绍。
# export HTTP_PROXY="http://10.10.1.10:3128"
# export HTTPS_PROXY="http://10.10.1.10:1080"
# requests.get(url)
# (3)若你的代理需要使用HTTP Basic Auth颁褂,可以使用 http://user:password@host/ 語法:
# proxies = {
# "http": "http://user:pass@10.10.1.10:3128/",
# }
# (4)要為某個特定的連接方式或者主機設(shè)置代理,使用 scheme://hostname 作為 key傀广, 它會針對指定的主機和連接方式進行匹配颁独。
# proxies = {'http://10.20.1.128': 'http://10.10.1.10:5323'}
# 九、SOCKS 協(xié)議代理
# 除了基本的 HTTP 代理伪冰,Request 還支持 SOCKS 協(xié)議的代理誓酒。
# 安裝:pip install requests[socks]
# 使用 SOCKS 代理和使用 HTTP 代理一樣
# proxie = {
# 'http': 'socks5://user:pass@host:port',
# 'https': 'socks5://user:pass@host:port'
# }
# requests.get(url,proxies=proxie)
# 十、定制HTTP動詞
# 常規(guī)的HTTP動詞有GET贮聂、OPTIONS靠柑、HEAD、POST吓懈、PUT歼冰、PATCH、DELETE等
# 有時候你會碰到一些服務(wù)器耻警,處于某些原因停巷,它們要求用戶使用上述 HTTP 動詞之外的定制動詞。
# requests 使用內(nèi)建的 .request 方法就可以了榕栏。例如某臺服務(wù)器要求使用 MKCOL 方法畔勤。
# response = requests.request('MKCOL', url, data=data)
# response.status_code
快速上手/基本使用:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html
高級用法:http://docs.python-requests.org/zh_CN/latest/user/advanced.html
API:http://docs.python-requests.org/zh_CN/latest/api.html
注:原創(chuàng)文章,未經(jīng)作者本人同意扒磁,禁止轉(zhuǎn)載庆揪。
原文地址:http://www.reibang.com/p/94e23184b914