Python中request庫的各種用法詳細解析
引言
在現(xiàn)代網(wǎng)絡(luò)應(yīng)用中,與服務(wù)器進行通信是一個非?;A(chǔ)且重要的功能。Python的requests
庫是一個非常強大且易于使用的HTTP庫,它允許我們發(fā)送HTTP請求,與Web服務(wù)進行交互。本文將詳細介紹requests
庫的使用,包括其基本概念、常用功能以及一些高級用法。
安裝requests庫
在使用requests
庫之前,我們需要先安裝它??梢酝ㄟ^pip
命令來安裝:
pip install requests
基本概念
HTTP請求方法
HTTP協(xié)議定義了幾種請求方法,最常見的有:
- GET:從服務(wù)器獲取資源。
- POST:向服務(wù)器提交數(shù)據(jù),通常用于創(chuàng)建新資源。
- PUT:更新服務(wù)器上的資源。
- DELETE:刪除服務(wù)器上的資源。
請求URL
URL(Uniform Resource Locator)是用于定位資源的字符串。例如:https://api.example.com/data
。
請求頭
請求頭(Headers)包含了關(guān)于請求的元數(shù)據(jù),例如內(nèi)容類型、用戶代理等。
請求體
請求體(Body)通常用于POST和PUT請求,包含要發(fā)送的數(shù)據(jù)。
基本用法
發(fā)送GET請求
發(fā)送GET請求是最簡單的操作之一。以下是一個示例:
import requests response = requests.get('https://api.github.com') print(response.status_code) # 打印狀態(tài)碼 print(response.text) # 打印響應(yīng)內(nèi)容
發(fā)送POST請求
發(fā)送POST請求時,通常需要傳遞一些數(shù)據(jù)。以下是一個示例:
import requests url = 'https://httpbin.org/post' data = {'key': 'value'} response = requests.post(url, data=data) print(response.status_code) # 打印狀態(tài)碼 print(response.json()) # 打印JSON格式的響應(yīng)內(nèi)容
傳遞請求頭
有時我們需要在請求中添加自定義的請求頭。以下是一個示例:
import requests url = 'https://api.github.com' headers = {'User-Agent': 'my-app/0.0.1'} response = requests.get(url, headers=headers) print(response.status_code) # 打印狀態(tài)碼 print(response.text) # 打印響應(yīng)內(nèi)容
處理響應(yīng)
狀態(tài)碼
響應(yīng)的狀態(tài)碼表示請求的結(jié)果。常見的狀態(tài)碼有:
- 200:請求成功。
- 404:資源未找到。
- 500:服務(wù)器內(nèi)部錯誤。
響應(yīng)內(nèi)容
響應(yīng)內(nèi)容可以是文本、JSON、二進制數(shù)據(jù)等。以下是一些示例:
import requests response = requests.get('https://api.github.com') # 獲取文本內(nèi)容 print(response.text) # 獲取JSON內(nèi)容 print(response.json()) # 獲取二進制內(nèi)容 print(response.content)
響應(yīng)頭
響應(yīng)頭包含了關(guān)于響應(yīng)的元數(shù)據(jù)。以下是一個示例:
import requests response = requests.get('https://api.github.com') print(response.headers)
高級用法詳解
在掌握了requests
庫的基本用法之后,我們可以進一步探索其高級功能。這些高級功能可以幫助我們更靈活、更高效地處理復(fù)雜的HTTP請求場景。以下是對高級用法的詳細說明。
1. 會話對象(Session Objects)
會話對象允許我們在多個請求之間保持某些參數(shù),例如cookies、headers等。使用會話對象可以簡化代碼,提高效率。
示例:
import requests # 創(chuàng)建一個會話對象 session = requests.Session() # 更新會話的默認(rèn)headers session.headers.update({'User-Agent': 'my-app/0.0.1'}) # 發(fā)送第一個請求,設(shè)置一個cookie response1 = session.get('https://httpbin.org/cookies/set/sessioncookie/123456789') print(response1.text) # 發(fā)送第二個請求,獲取之前設(shè)置的cookie response2 = session.get('https://httpbin.org/cookies') print(response2.text)
在這個示例中,我們創(chuàng)建了一個會話對象,并在多個請求之間共享了headers和cookies。這樣可以確保在多個請求之間保持一致的狀態(tài)。
2. 處理重定向(Handling Redirects)
默認(rèn)情況下,requests
庫會自動處理重定向。我們可以通過allow_redirects
參數(shù)來控制是否允許重定向。
示例:
import requests # 禁止重定向 response = requests.get('http://github.com', allow_redirects=False) print(response.status_code) # 打印狀態(tài)碼 print(response.headers['Location']) # 打印重定向的URL
在這個示例中,我們發(fā)送了一個GET請求到http://github.com
,并禁止了重定向。響應(yīng)的狀態(tài)碼為301,表示請求被永久重定向,響應(yīng)頭中的Location
字段包含了重定向的目標(biāo)URL。
3. 超時設(shè)置(Timeout Settings)
在發(fā)送請求時,我們可以設(shè)置超時時間,以避免長時間的等待。超時時間可以應(yīng)用于連接階段和讀取階段。
示例:
import requests from requests.exceptions import Timeout try: # 設(shè)置連接超時和讀取超時 response = requests.get('https://httpbin.org/delay/10', timeout=(3, 5)) except Timeout: print('The request timed out')
在這個示例中,我們設(shè)置了一個3秒的連接超時和5秒的讀取超時。如果請求在3秒內(nèi)未能建立連接或在5秒內(nèi)未能讀取到響應(yīng)數(shù)據(jù),就會拋出Timeout
異常。
4. 代理支持(Proxy Support)
requests
庫支持通過代理發(fā)送請求。我們可以為不同的協(xié)議(HTTP、HTTPS)設(shè)置不同的代理。
示例:
import requests # 設(shè)置代理 proxies = { 'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:1080', } response = requests.get('https://httpbin.org/ip', proxies=proxies) print(response.text)
在這個示例中,我們?yōu)镠TTP和HTTPS請求分別設(shè)置了代理。通過代理發(fā)送請求可以隱藏客戶端的真實IP地址,或者繞過某些網(wǎng)絡(luò)限制。
5. 文件上傳(File Uploads)
requests
庫支持上傳文件。我們可以通過files
參數(shù)來上傳文件。
示例:
import requests # 準(zhǔn)備文件 files = {'file': open('report.xls', 'rb')} # 上傳文件 response = requests.post('https://httpbin.org/post', files=files) print(response.text)
在這個示例中,我們上傳了一個名為report.xls
的文件。服務(wù)器會返回上傳文件的相關(guān)信息。
6. 流式請求(Streaming Requests)
對于大文件或需要實時處理的響應(yīng),我們可以使用流式請求。這樣可以避免一次性加載大量數(shù)據(jù)到內(nèi)存中。
示例:
import requests # 流式請求 response = requests.get('https://httpbin.org/stream/20', stream=True) # 逐行讀取響應(yīng)內(nèi)容 for line in response.iter_lines(): if line: print(line)
在這個示例中,我們發(fā)送了一個流式請求,并逐行讀取響應(yīng)內(nèi)容。這樣可以有效地處理大文件或?qū)崟r數(shù)據(jù)流。
7. 自定義身份驗證(Custom Authentication)
requests
庫支持自定義身份驗證。我們可以通過繼承requests.auth.AuthBase
類來實現(xiàn)自定義的身份驗證邏輯。
示例:
import requests from requests.auth import AuthBase # 自定義身份驗證類 class TokenAuth(AuthBase): def __init__(self, token): self.token = token def __call__(self, r): r.headers['Authorization'] = f'Bearer {self.token}' return r # 使用自定義身份驗證發(fā)送請求 response = requests.get('https://httpbin.org/get', auth=TokenAuth('my-token')) print(response.text)
在這個示例中,我們定義了一個名為TokenAuth
的自定義身份驗證類,并在發(fā)送請求時使用了這個類。這樣可以靈活地實現(xiàn)各種身份驗證邏輯。
8. 處理Cookies
requests
庫提供了方便的方法來處理Cookies。我們可以獲取、設(shè)置和刪除Cookies。
示例:
import requests # 創(chuàng)建一個會話對象 session = requests.Session() # 設(shè)置一個cookie session.get('https://httpbin.org/cookies/set/sessioncookie/123456789') # 獲取所有cookies cookies = session.cookies print(cookies) # 刪除一個cookie cookies.clear_expired_cookies() print(cookies)
在這個示例中,我們通過會話對象設(shè)置了一個cookie,并獲取和刪除了cookies。這樣可以方便地管理會話狀態(tài)。
9. 處理SSL證書驗證
requests
庫默認(rèn)會驗證SSL證書。我們可以通過verify
參數(shù)來控制是否驗證SSL證書。
示例:
import requests # 禁用SSL證書驗證 response = requests.get('https://httpbin.org', verify=False) print(response.text)
在這個示例中,我們禁用了SSL證書驗證。這樣可以方便地測試不安全的HTTPS站點,但需要注意安全風(fēng)險。
10. 自定義適配器(Custom Adapters)
requests
庫允許我們自定義適配器,以實現(xiàn)更復(fù)雜的請求邏輯。我們可以通過繼承requests.adapters.HTTPAdapter
類來實現(xiàn)自定義的適配器。
示例:
import requests from requests.adapters import HTTPAdapter # 自定義適配器 class MyAdapter(HTTPAdapter): def send(self, request, **kwargs): print(f'Sending request to {request.url}') return super().send(request, **kwargs) # 創(chuàng)建一個會話對象,并使用自定義適配器 session = requests.Session() session.mount('https://', MyAdapter()) # 發(fā)送請求 response = session.get('https://httpbin.org/get') print(response.text)
在這個示例中,我們定義了一個名為MyAdapter
的自定義適配器,并在會話對象中使用了這個適配器。這樣可以方便地實現(xiàn)自定義的請求邏輯。
總結(jié)
到此這篇關(guān)于Python中request庫的各種用法的文章就介紹到這了,更多相關(guān)Python request庫解析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python爬蟲headers處理及網(wǎng)絡(luò)超時問題解決方案
這篇文章主要介紹了Python爬蟲headers處理及網(wǎng)絡(luò)超時問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06python UDF 實現(xiàn)對csv批量md5加密操作
這篇文章主要介紹了python UDF 實現(xiàn)對csv批量md5加密操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01python 將dicom圖片轉(zhuǎn)換成jpg圖片的實例
今天小編就為大家分享一篇python 將dicom圖片轉(zhuǎn)換成jpg圖片的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01Python讀取Excel數(shù)據(jù)實現(xiàn)批量生成合同
Python在自動化辦公方面具有極大的優(yōu)勢,可以解決我們工作中遇到的很多重復(fù)性問題。本文將通過Python讀取Excel數(shù)據(jù)實現(xiàn)批量生成合同,需要的可以參考一下2022-05-05python實現(xiàn)sm2和sm4國密(國家商用密碼)算法的示例
這篇文章主要介紹了python實現(xiàn)sm2和sm4國密(國家商用密碼)算法的示例,幫助大家使用python加密文件,感興趣的朋友可以了解下2020-09-09Python嵌套列表轉(zhuǎn)一維的方法(壓平嵌套列表)
今天小編就為大家分享一篇Python嵌套列表轉(zhuǎn)一維的方法(壓平嵌套列表),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07Python利用arcpy模塊實現(xiàn)柵格的創(chuàng)建與拼接
這篇文章主要為大家詳細介紹了如何基于Python語言arcpy模塊,實現(xiàn)柵格影像圖層建立與多幅遙感影像數(shù)據(jù)批量拼接(Mosaic)的操作,感興趣的可以了解一下2023-02-02對python中xlsx,csv以及json文件的相互轉(zhuǎn)化方法詳解
今天小編就為大家分享一篇對python中xlsx,csv以及json文件的相互轉(zhuǎn)化方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12python使用celery實現(xiàn)異步任務(wù)執(zhí)行的例子
今天小編就為大家分享一篇python使用celery實現(xiàn)異步任務(wù)執(zhí)行的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08