做外匯需要關(guān)注哪幾個網(wǎng)站企業(yè)產(chǎn)品推廣運營公司
一、requests庫簡介
使用requests庫能快速構(gòu)建 HTTP 請求,而無需深入了解底層網(wǎng)絡(luò)協(xié)議細節(jié)。其API設(shè)計直觀,使得發(fā)送請求就像調(diào)用函數(shù)一樣簡單,同時提供了豐富的選項以滿足復(fù)雜網(wǎng)絡(luò)交互的需求。這種設(shè)計使得無論是初學者還是經(jīng)驗豐富的開發(fā)者都能高效地使用 Requests 進行網(wǎng)絡(luò)編程。
requests的特點如下:
全面的 HTTP 支持: 支持所有 HTTP 方法(GET、POST、PUT、DELETE、PATCH 等),以及常見的 HTTP 特性,如 cookies、重定向、壓縮、認證、代理、連接池等。
自動內(nèi)容處理: 自動解碼響應(yīng)內(nèi)容,支持 JSON、HTML、XML 等常見格式,并可通過 .text 和 .content 屬性直接訪問解碼后的文本或原始二進制數(shù)據(jù)。
便捷的請求構(gòu)建: 可輕松設(shè)置請求頭、查詢參數(shù)、請求體、認證信息等,支持多部分表單上傳、文件上傳、JSON 數(shù)據(jù)發(fā)送等。
靈活的會話管理: 提供 Session 對象,用于維護請求之間的狀態(tài)(如 cookies、headers),并支持連接池復(fù)用,提高性能。
強大的異常處理: 提供明確的異常層次結(jié)構(gòu),如 requests.exceptions.RequestException、requests.exceptions.HTTPError,便于捕獲和處理網(wǎng)絡(luò)錯誤、HTTP 狀態(tài)碼異常等。
廣泛的兼容性: 支持 Python 2.7 及更高版本的 Python 3.x,與各種操作系統(tǒng)兼容。
Requests 基于 urllib3 模塊構(gòu)建,后者負責底層的網(wǎng)絡(luò)通信。Requests 采用 Apache2 Licensed 開源協(xié)議,這意味著它是一個免費且開放源代碼的軟件,允許在商業(yè)和非商業(yè)項目中自由使用、修改和分發(fā)。
Requests 的官方文檔詳盡且易于閱讀,提供了豐富的示例和指南,是學習和查閱庫功能的首要資源:Requests官方文檔
二、安裝與導入
安裝:
1、PC終端(CMD):
python -m pip install requests
2、PyCharm終端:
pip install requests
導入:
import requests
’
運行
三、核心組件及其常見屬性
1、request
由于requests庫主要用于客戶端發(fā)起HTTP請求,它并不直接暴露一個名為Request的對象供開發(fā)者操作,而是提供了requests.Request類作為構(gòu)建請求的基礎(chǔ),但通常用戶更常與requests.Session及其實例方法(如.get()、.post()等)交互。請求構(gòu)建過程中涉及的屬性:
[請求方法及其區(qū)別:
2、response
當使用requests庫收到服務(wù)器的響應(yīng)時,會得到一個requests.Response對象,其常見屬性包括:
布爾值
3、session
requests.Session是一個高級接口,用于管理一系列相關(guān)的HTTP請求,并且支持會話保持(如自動處理Cookies)。其主要屬性和方法包括:
四、不同HTTP請求示例
1、GET請求
功能與語義: GET請求用于從服務(wù)器獲取指定資源。發(fā)送GET請求相當于詢問服務(wù)器:“請給我這個資源?!眳?shù)位置: GET請求的參數(shù)通常放在URL的查詢字符串中,即URL后面以?開始的部分,參數(shù)之間用&分隔,每個參數(shù)由鍵值對組成,鍵與值之間用等號 (=) 連接。例如:https://example.com/api/resource?param1=value1¶m2=value2緩存: GET請求的響應(yīng)通常被認為是安全可緩存的。瀏覽器、代理服務(wù)器和其他中間件可能會緩存GET請求的響應(yīng)結(jié)果,以便在未來相同請求時直接使用緩存,而不是再次向服務(wù)器請求。冪等性: GET請求是冪等的,即多次執(zhí)行相同GET請求(針對同一資源)應(yīng)始終返回相同的響應(yīng)結(jié)果,不會對服務(wù)器狀態(tài)產(chǎn)生任何影響。安全性: 相對安全,因為它不改變服務(wù)器狀態(tài)。
示例:
import requests
url_get='https://postman-echo.com/get?key1=value1&key2=value2'
response = requests.get(url_get)
print(response.text)
控制臺輸出如下:
設(shè)置查詢參數(shù)示例:
param={'key3':'value3','key4':'value4','key5':'value5',
}
response_get_param=requests.get(url_get,params=param)
print(response_get_param.url)
print(response_get_param.text)
控制臺輸出如下:
可以看到使用params參數(shù)傳參,會將參數(shù)自動拼接到url上
2、POST請求
功能與語義: POST請求用于向服務(wù)器提交數(shù)據(jù),主要用于創(chuàng)建新的資源或執(zhí)行某種操作(更新、刪除等,具體取決于API設(shè)計)。發(fā)送POST請求相當于告訴服務(wù)器:“請根據(jù)我提供的數(shù)據(jù)執(zhí)行某個操作?!眳?shù)位置: POST請求的數(shù)據(jù)通常放在請求正文中,可以是完整的資源表示(創(chuàng)建資源)或操作指令及關(guān)聯(lián)數(shù)據(jù)(執(zhí)行操作)。請求體的格式取決于Content-Type標頭,常見的是application/json(JSON格式)或application/xml(XML格式)。緩存: POST請求的響應(yīng)通常不應(yīng)被緩存,因為它們可能改變了服務(wù)器狀態(tài)。冪等性: POST請求不一定是冪等的,即多次執(zhí)行相同POST請求可能會產(chǎn)生不同的結(jié)果(例如,創(chuàng)建多個新的資源)。但某些情況下,如當POST用于替換資源或執(zhí)行冪等操作時,它也可以是冪等的。安全性: POST請求可能引發(fā)副作用,因為它不僅用于創(chuàng)建資源,也可能執(zhí)行非冪等操作。
提交請求體表單數(shù)據(jù)示例:
通過data參數(shù)傳遞表單編碼數(shù)據(jù),適用于POST、PUT等請求。數(shù)據(jù)會被編碼為application/x-www-form-urlencoded格式
url_post='https://postman-echo.com/post'
data={'key':'value','website':'www.baidu.com'
}
response_post_data=requests.post(url_post,data=data)
print(response_post_data.text)
控制臺輸出如下:
發(fā)送JSON數(shù)據(jù)示例:
通過json參數(shù)直接傳遞JSON數(shù)據(jù),適用于支持JSON格式請求體的POST、PUT等請求。requests會自動將字典轉(zhuǎn)換為JSON字符串,并設(shè)置Content-Type為application/json
json_data={'key':'value','website':'www.baidu.com'
}
response_post_json=requests.post(url_post,json=json_data)
print(response_post_json.text)
控制臺輸出如下:
我們發(fā)現(xiàn)使用參數(shù)data、json,傳參在請求正文中的位置是不一樣的,
使用 data 參數(shù)時,數(shù)據(jù)將以 application/x-www-form-urlencoded 格式編碼,并以 key=value 形式的字符串放置在請求正文中。
使用 json 參數(shù)時,數(shù)據(jù)將以 JSON 文本格式放置在請求正文中,結(jié)構(gòu)清晰,適合傳輸復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
3、上傳文件
示例:
import requestsurl_post='https://postman-echo.com/post'
file_path='./test.txt'# 構(gòu)建 multipart/form-data 格式的文件數(shù)據(jù)
files = {'file': open(file_path, 'rb')}# 發(fā)起POST請求,攜帶文件數(shù)據(jù)
response = requests.post(url_post, files=files)# 檢查響應(yīng)狀態(tài)碼
if response.status_code == 200:print("文件上傳成功,響應(yīng)內(nèi)容:")print(response.text)
else:print(f"文件上傳失敗,狀態(tài)碼:{response.status_code}")
控制臺輸出如下:
五、Session實現(xiàn)會話管理
使用requests.Session()創(chuàng)建一個會話對象(session),以便在一系列請求之間保持某些狀態(tài),如請求頭、公共參數(shù)、cookies、認證信息、連接池等。以下是使用session對象的示例:
1、通過Session對象設(shè)置全局請求頭及全局參數(shù)
import requests# 創(chuàng)建一個Session對象
session = requests.Session()# 設(shè)置全局請求頭(適用于所有通過此Session發(fā)出的請求)
session.headers.update({'User-Agent': 'MyApp/1.0','X-Api-Key': 'your_api_key'
})# 設(shè)置共享公共參數(shù)
session.params = {'param1': 'value1','param2': 'value2'
}# 使用Session對象發(fā)起GET請求
response = session.get('https://postman-echo.com/get')# 檢查響應(yīng)狀態(tài)碼
if response.status_code == 200:print("GET請求成功,響應(yīng)內(nèi)容:")print(response.json())
else:print(f"GET請求失敗,狀態(tài)碼:{response.status_code}")# 使用Session對象發(fā)起POST請求,攜帶JSON數(shù)據(jù)
post_data = {"key1": "value1","key2": "value2"
}
response = session.post('https://postman-echo.com/post', json=post_data)# 檢查響應(yīng)狀態(tài)碼
if response.status_code == 200:print("POST請求成功,響應(yīng)內(nèi)容:")print(response.json())
else:print(f"POST請求失敗,狀態(tài)碼:{response.status_code}")
控制臺輸出如下:
可以明顯發(fā)現(xiàn),使用Session()對象設(shè)置的全局請求頭以及全局參數(shù)都實現(xiàn)了
2、通過Session對象管理cookie:
import requestssession = requests.Session()
# 使用Session對象發(fā)起GET請求,獲取一個帶Set-Cookie響應(yīng)頭的響應(yīng)
response = session.get('https://postman-echo.com/cookies/set?foo=bar&baz=qux')# 檢查響應(yīng)狀態(tài)碼
if response.status_code == 200:print("GET請求成功,響應(yīng)內(nèi)容:")print(response.json())# 使用Session對象再次發(fā)起GET請求,此時Session會自動附上之前接收到的cookies
response = session.get('https://postman-echo.com/cookies')# 檢查響應(yīng)狀態(tài)碼
if response.status_code == 200:print("\nCookies檢查請求成功,響應(yīng)內(nèi)容:")print(response.json())
else:print(f"Cookies檢查請求失敗,狀態(tài)碼:{response.status_code}")# 關(guān)閉Session(可選,釋放資源)
session.close()
在這個示例中:首先創(chuàng)建了一個requests.Session()對象,用于管理一系列相關(guān)的HTTP請求。通過session.headers.update()方法設(shè)置了全局請求頭。這些頭信息將自動應(yīng)用到通過該Session發(fā)出的所有請求上,無需在每次請求時單獨設(shè)置。使用Session對象的get()方法發(fā)起一個GET請求,并檢查響應(yīng)狀態(tài)碼。如果狀態(tài)碼為200,說明請求成功,打印響應(yīng)內(nèi)容。使用Session對象的post()方法發(fā)起一個POST請求,攜帶JSON數(shù)據(jù)。同樣檢查響應(yīng)狀態(tài)碼,如果狀態(tài)碼為200,說明請求成功,打印響應(yīng)內(nèi)容。(可選)使用session.close()關(guān)閉Session,釋放相關(guān)資源。在實際使用中,尤其是在長生命周期的程序中,確保及時關(guān)閉Session以避免資源泄漏。
控制臺輸出如下:
希望以上內(nèi)容能幫助大家有效理解requests模塊,同時也建議大家通過開源api網(wǎng)站去強化練習使用requests,具備編寫Python程序與各類Web服務(wù)進行交互的能力,為進一步學習網(wǎng)絡(luò)編程、API開發(fā)與集成等技術(shù)打下堅實基礎(chǔ)。