一、requests介紹
requests模塊是一個(gè)用于發(fā)送HTTP請(qǐng)求的第三方庫(kù),其設(shè)計(jì)初衷是簡(jiǎn)化HTTP請(qǐng)求的發(fā)送和處理。
與Python標(biāo)準(zhǔn)庫(kù)中的urllib相比,requests提供了更直觀和便捷的API,使開發(fā)者能夠快速編寫功能強(qiáng)大的HTTP客戶端
1.1安裝
1 pip install requests
1.2導(dǎo)入模塊
1 import requests
二、發(fā)送HTTP請(qǐng)求
requests模塊支持多種類型的HTTP請(qǐng)求,包括GET、POST、PUT、DELETE等。下面將逐一介紹這些請(qǐng)求的用法。
get(url, **kwargs): 發(fā)送一個(gè)GET請(qǐng)求。post(url, data=None, **kwargs): 發(fā)送一個(gè)POST請(qǐng)求,data可以是字典、字節(jié)或文件對(duì)象。put(url, data=None, **kwargs): 發(fā)送一個(gè)PUT請(qǐng)求。delete(url, **kwargs): 發(fā)送一個(gè)DELETE請(qǐng)求。head(url, **kwargs): 發(fā)送一個(gè)HEAD請(qǐng)求,只獲取頁(yè)面的HTTP頭信息。options(url, **kwargs): 發(fā)送一個(gè)OPTIONS請(qǐng)求,獲取服務(wù)器支持的HTTP方法。patch(url, data=None, **kwargs): 發(fā)送一個(gè)PATCH請(qǐng)求。
官網(wǎng)鏈接:http://docs.python-requests.org/en/master/
2.1 GET請(qǐng)求
GET請(qǐng)求用于從服務(wù)器獲取數(shù)據(jù)。requests.get方法可以發(fā)送一個(gè)GET請(qǐng)求,并返回一個(gè)響應(yīng)對(duì)象。
(1.)沒(méi)有請(qǐng)求體
(2.)數(shù)據(jù)必須在1k之內(nèi)
(3)get請(qǐng)求數(shù)據(jù)會(huì)暴露在瀏覽器的地址欄中

在這個(gè)示例中,我向博客園發(fā)送了一個(gè)GET請(qǐng)求,并打印了響應(yīng)的狀態(tài)碼和響應(yīng)內(nèi)容 。
2.2 POST請(qǐng)求
POST請(qǐng)求用于向服務(wù)器提交數(shù)據(jù)。requests.post方法可以發(fā)送一個(gè)POST請(qǐng)求,并返回一個(gè)響應(yīng)對(duì)象。
(1)數(shù)據(jù)不會(huì)出現(xiàn)在地址欄中 (2)數(shù)據(jù)的大小沒(méi)有上限 (3)有請(qǐng)求體 (4)請(qǐng)求體中如果存在中文,會(huì)使用URL編碼!
requests.post()用法與requests.get()完全一致,特殊的是requests.post()有一個(gè)data參數(shù),用來(lái)存放請(qǐng)求體數(shù)據(jù)
1 import requests 2 import json 3 4 headers = {'Content-Type': 'application/json'} 5 data = { 6 "key1": "value1", 7 "key2": "value2" 8 } 9 json_data = json.dumps(data) 10 response_json = requests.post('http://www.rzrgm.cn/', data=json_data,headers=headers) 11 12 print(response_json.status_code) 13 print(response_json.text)
2.3 PUT請(qǐng)求
PUT請(qǐng)求用于更新服務(wù)器上的資源。requests.put方法可以發(fā)送一個(gè)PUT請(qǐng)求,并返回一個(gè)響應(yīng)對(duì)象。
2.4 DELETE請(qǐng)求
DELETE請(qǐng)求用于刪除服務(wù)器上的資源。requests.delete方法可以發(fā)送一個(gè)DELETE請(qǐng)求,并返回一個(gè)響應(yīng)對(duì)象。
三、請(qǐng)求參數(shù)和頭信息
在實(shí)際應(yīng)用中,通常需要在請(qǐng)求中包含參數(shù)和頭信息。requests模塊提供了便捷的方式來(lái)添加這些信息。
3.1 URL參數(shù)
可以使用params參數(shù)向URL中添加查詢參數(shù)。

3.2 請(qǐng)求頭
可以使用headers參數(shù)添加自定義請(qǐng)求頭。

四、響應(yīng)處理
requests模塊返回的響應(yīng)對(duì)象包含豐富的信息和方法,方便我們處理HTTP響應(yīng)。
# respone屬性
print(respone.text)
print(respone.content)
print(respone.status_code)
print(respone.headers)
print(respone.cookies)
print(respone.cookies.get_dict())
print(respone.cookies.items())
print(respone.url)
print(respone.history)
print(respone.encoding)1
————————————————
4.1 狀態(tài)碼
可以通過(guò)響應(yīng)對(duì)象的status_code屬性獲取HTTP狀態(tài)碼。
1 import requests 2 3 response = requests.get('http://www.rzrgm.cn/') 4 5 print(response.status_code) 6 print(response.text) 7 print(response.content)
五、文件上傳和下載
在實(shí)際應(yīng)用中,常常需要上傳和下載文件。requests模塊提供了便捷的文件處理方法。
5.1 文件下載
可以使用files參數(shù)下載文件。
1 import requests 2 3 response = requests.get('https://www.example.com/image.jpg') 4 5 with open('image.jpg', 'wb') as file: 6 file.write(response.content)
六、處理Cookies
requests模塊可以自動(dòng)處理Cookies,并允許手動(dòng)設(shè)置和獲取Cookies。
6.1 自動(dòng)處理Cookies
1 import requests 2 3 # 創(chuàng)建一個(gè) Session 對(duì)象 4 session = requests.Session() 5 6 # 登錄的目標(biāo) URL 7 # login_url = 'https://example.com/login' 8 login_url = 'http://www.rzrgm.cn/' 9 10 # 登錄所需的表單數(shù)據(jù) 11 login_data = { 12 'username': 'jh', 13 'password': '123', 14 } 15 16 # 發(fā)送 POST 請(qǐng)求進(jìn)行登錄 17 response = session.post(login_url, data=login_data) 18 19 print("登錄響應(yīng)狀態(tài)碼:", response.status_code) 20 21 if response.ok: 22 print("登錄成功!") 23 24 # 登錄后訪問(wèn)另一個(gè)需要身份驗(yàn)證的頁(yè)面 25 protected_url = 'https://example.com/protected' 26 protected_response = session.get(protected_url) 27 28 if protected_response.ok: 29 print("訪問(wèn)受保護(hù)頁(yè)面成功!") 30 print(protected_response.text) # 打印受保護(hù)頁(yè)面的內(nèi)容 31 else: 32 print("訪問(wèn)受保護(hù)頁(yè)面失敗,狀態(tài)碼:", protected_response.status_code) 33 else: 34 print("登錄失敗,狀態(tài)碼:", response.status_code)
浙公網(wǎng)安備 33010602011771號(hào)