一、基本介紹
requests是一個強大的Python HTTP客戶端庫,requests.session是一個提供cookie持久性的類。requests.session對象可以跨請求保持某些參數,如cookie,header等。
使用requests.session可以讓我們更方便地設置HTTP請求頭和Cookie等信息,節省代碼量,提高開發效率。
二、創建Session對象
在開始使用requests.Session()之前,我們需要先導入requests庫:
import requests
接着,我們可以使用requests.Session()創建一個會話:
s = requests.Session()
可以看到,創建Session對象只是簡單地實例化了一個requests.Session()對象。
三、Session對象的使用
1、發送請求
我們可以通過Session對象發送GET、POST以及其他HTTP請求。使用Session對象發送請求和使用普通的requests.get()或requests.post()並沒有什麼區別。
示例代碼:
response = s.get('http://httpbin.org/cookies/set/sessioncookie/123456789') print(response.text)
通過上面的代碼,我們向httpbin.org發送了一個GET請求,並向其設置了一個名為sessioncookie的cookie。下面的代碼可以驗證這個cookie是否成功設置:
response = s.get('http://httpbin.org/cookies') print(response.text)
這段代碼輸出的內容是:
{ "cookies": { "sessioncookie": "123456789" } }
可以看到,我們成功地獲取了剛剛設置的cookie。
2、使用請求頭
Session對象可以幫助我們自動為每個請求設置請求頭。對於那些需要使用相同請求頭的請求,使用Session對象可以避免重複代碼。
使用Session對象設置默認請求頭:
s.headers.update({'key':'value'})
這樣,我們創建的Session對象在發送請求時都會默認攜帶key:value的請求頭。如果有些請求需要不同的請求頭,可以在發送請求時覆蓋默認請求頭:
response = s.get('http://httpbin.org/headers', headers={'user-agent':'my-app/0.0.1'})
以上代碼中,我們設置了一個名為user-agent的請求頭,覆蓋了默認的請求頭。
3、持久性Cookie
使用Session對象可以讓所有的HTTP請求自動記錄並攜帶cookie,實現持久性cookie。例如,我們可以在一個請求中設置cookie,而後續所有的請求都會自動攜帶該cookie。
示例代碼:
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789') response = s.get('http://httpbin.org/cookies') print(response.text)
這段代碼輸出的內容是:
{ "cookies": { "sessioncookie": "123456789" } }
可以看到,我們成功地設置了一個cookie,並通過Session對象發送了一個GET請求。在接下來的請求中,該cookie會自動被攜帶。
4、會話過期
Session對象還可以模擬瀏覽器會話過期的場景。示例代碼如下:
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789') response = s.get('http://httpbin.org/cookies', cookies={'sessioncookie': 'expired'}) print(response.text)
以上代碼中,我們在第一個請求中設置了一個cookie,並在第二個請求中將該cookie設置為過期。發送第二個請求後,服務器將會返回cookie過期的錯誤信息。
四、Session對象的優點
使用Session對象的優點主要體現在以下幾個方面:
1、自動記錄Cookie
Session對象可以自動記錄每個HTTP請求中的Cookie,從而實現Cookie的持久性。無需手動設置和維護Cookie,大大減少了代碼量。
2、復用TCP連接
Session對象採用TCP長連接,當一個Session對象處理多個請求時,它們使用同一個TCP連接,而不是每次都建立一個新的連接,提高了連接效率。
3、自動處理重定向
當服務器返回重定向請求時,Session對象會自動處理,重定向的過程對用戶是透明的,不需要用戶自己處理。
4、使用更加方便
Session對象可以幫助我們自動記錄請求頭信息,避免重複的代碼;將上下文信息打包在一個對象中,更容易管理和使用。
五、總結
requests.session是一個提供cookie持久性的類,使用Session對象發送請求和使用普通的requests.get()或requests.post()並沒有什麼區別。Session對象可以記錄並自動攜帶cookie、默認請求頭等信息,節省了重複代碼,並提高了連接效率。同時,Session對象還可以自動處理重定向請求。使用requests.session可以讓我們更輕鬆地處理HTTP請求,提高開發效率,是網絡爬蟲開發中的一個重要工具。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/206059.html