Python使用requests庫發(fā)送請求的示例代碼
前言
得益于各位技術(shù)大佬,經(jīng)過封裝后的requests庫提供了一系列的接口,讓我們可以更加便利地發(fā)送請求,管理Cookies和Session,以及驗證代理等一系列操作。如果發(fā)現(xiàn)本文中有哪些錯誤,請不吝指正。
各種 HTTP 請求方法,不在話下
與原生的urllib庫相比,requests庫提供了更簡潔、易于理解和使用的API,使發(fā)送HTTP請求變得更加直觀和高效
import requests # 導入工具包 r = requests.get('https://httpbin.org/get') # GET 請求 print(r.status_code) # 狀態(tài)碼 print(r.headers) # 請求頭 print(type(r)) # 類型
在這里,我們直接調(diào)用requests.get()
函數(shù),打開URL,并將返回的信息集合成一個對象,并賦值給r
。于是,我們便可以通過r
這個requests.models.Response 類型對象 的屬性,來查看狀態(tài)碼等響應信息。
神奇的是,不僅GET請求可以這樣做,PUT、DELETE等請求也可以如此這般:
r = requests.post('https://httpbin.org/post', data={'key': 'value'}) # POST 請求 r = requests.put('https://httpbin.org/put', data={'key': 'value'}) # PUT 請求 r = requests.delete('https://httpbin.org/delete') # DELETE 請求 r = requests.head('https://httpbin.org/get') # HEAD 請求 r = requests.options('https://httpbin.org/get') # OPTIONS 請求
糟糕糟糕,請求錯誤OMG
跌落谷底并不可怕,可怕的是茫然四顧卻束手無措。在Python的requests庫中,我們也可以很方便地使用異常處理機制來有效捕捉和處理各種不同的異常。
import requests # 導入工具包 try: # 用try和except塊捕捉可能的異常 response = requests.get('https://baidu.com') response.raise_for_status() except requests.exception.HTTPError as e: print('HTTP 錯誤:', e)
response = requests.get('https://baidu.com')
,如同上面所說,用requests.get()
方法發(fā)出HTTP請求,并將響應信息集合成實例對象responseresponse.raise_for_status()
,該方法用來檢查響應信息的狀態(tài)碼,如果狀態(tài)碼是一個錯誤(比如404 Not Found
或500 Internal Server Error
等),則會引發(fā)requests.exceptions.HTTPError
異常,從而使代碼跳轉(zhuǎn)except
模塊,方便處理異常except requests.exception.HTTPError as e:
,該語句進行異常處理,用于捕獲requests
庫中的HTTPError
異常,并將其存儲在變量e
中,以便對異常對象進行訪問或處理
當然,請求錯誤有很多類型,不止剛才提到的HTTP錯誤異常(HTTPError),還有連接異常(ConnectionError) 和 超時異常(Timeout) 等異常情況。要想捕捉這些異常也非常簡單,只需要把except requests.exception.HTTPError as e:
語句中的HTTPError
改成相應的異常名稱即可。
Session會話,持久高效
在urllin庫中,Session會話狀態(tài)不易維護,我們需要手動管理每個請求的cookies,代碼量較大且不夠簡潔。而requests庫提供了非常靈活的管理接口,可以輕松地在多個會話之間保持會話狀態(tài)信息。
作為新手,我常?;煜?strong>Session和Cookies這兩者的概念。事實上,由于各個HTTP請求是無狀態(tài)和相互獨立的,服務器為了跟蹤用戶的狀態(tài)信息,便提供一種機制,使其可以識別在短時間內(nèi)多個不同的HTTP請求是同一個用戶發(fā)出的,從而提供更多個性化服務。這種機制,便是會話(Session)。
那么,服務器是如何識別這多個不同的HTTP請求是同一個用戶發(fā)出的呢?
通過用戶發(fā)送的HTTP請求信息中的一個令牌。這令牌,便是唯一會話標識符(Session ID)。當服務器第一次接收到用戶的HTTP請求時,便給用戶發(fā)送這個唯一會話標識符(Session ID),那么只要當之后瀏覽器等客戶端每一次發(fā)送HTTP請求時,帶上這個令牌,服務器便可以識別不同的HTTP請求是同一個用戶發(fā)出的。在瀏覽器等客戶端中,維護這令牌的,便是Cookies。
于是在實際爬蟲中,我們?nèi)绻行枰?,便可以去維護Cookies,從而讓服務器能夠長久地維護Session會話。
import requests # 導入工具包 s = requests.Session() # 創(chuàng)建一個 Session 對象 s.get('https://httpbin.org/get') # 發(fā)送 GET 請求 s.cookies.set('key','value') # 設置 Cookies 參數(shù) s.headers.update({'User-Agent':'Mozilla/5.0'}) # 設置headers參數(shù),自定義請求頭
s = requests.Session()
,這里用requests.Session()
方法構(gòu)建一個會話對象,并將其賦值給s
。s.get('https://httpbin.org/get')
,值得注意的是,該會話對象s
的類型是requests.sessions.Session 類型對象,該類型對象可以像 requests.models.Response 類型對象一樣發(fā)送各類諸如GET、POST類型的HTTP請求。s.cookies.set('key','value')
,該語句通過使用cookies
參數(shù)來設置cookiess.headers.update({'User-Agent':'Mozilla/5.0'})
,該代碼使用headers
參數(shù)設置 headers,其中不僅可以包括User-Agent
客戶端類型表示,還可以包括Accept
客戶端可接受內(nèi)容類型、Authorization
身份驗證信息等
到此這篇關(guān)于Python使用requests庫發(fā)送請求的示例代碼的文章就介紹到這了,更多相關(guān)Python requests發(fā)送請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python測試攻略pytest.main()隱藏利器實例探究
在Pytest測試框架中,pytest.main()是一個重要的功能,用于啟動測試執(zhí)行,它允許以不同方式運行測試,傳遞參數(shù)和配置選項,本文將深入探討pytest.main()的核心功能,提供豐富的示例代碼和更全面的內(nèi)容,2024-01-01Python異步編程之協(xié)程任務的調(diào)度操作實例分析
這篇文章主要介紹了Python異步編程之協(xié)程任務的調(diào)度操作,結(jié)合實例形式分析了Python異步編程中協(xié)程任務的調(diào)度相關(guān)原理、實現(xiàn)方法與操作注意事項,需要的朋友可以參考下2020-02-02Windows下PyCharm配置Anaconda環(huán)境(超詳細教程)
這篇文章主要介紹了Windows下PyCharm配置Anaconda環(huán)境,本文給大家分享一篇超詳細教程,通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07Python中Django與Echarts的結(jié)合用法圖文詳解
ECharts是一個第三方控件,下面這篇文章主要給大家介紹了關(guān)于Python中Django與Echarts的結(jié)合用法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2022-10-10python -m pip install 和 pip in
python -m pip install <package> 使用了 -m 參數(shù)來確保以 Python 模塊的形式運行 pip,適用于確保在不同的環(huán)境中正確使用 pip,這篇文章主要介紹了python -m pip install 和 pip install 的區(qū)別,需要的朋友可以參考下2023-07-07Python基于機器學習方法實現(xiàn)的電影推薦系統(tǒng)實例詳解
這篇文章主要介紹了Python基于機器學習方法實現(xiàn)的電影推薦系統(tǒng),本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-06-06