一、requests介紹
requests模組是一個用於傳送HTTP請求的第三方庫,其設計初衷是簡化HTTP請求的傳送和處理。
與Python標準庫中的urllib相比,requests提供了更直觀和便捷的API,使開發者能夠快速編寫功能強大的HTTP客戶端
1.1安裝
1 pip install requests
1.2匯入模組
1 import requests
二、傳送HTTP請求
requests模組支援多種型別的HTTP請求,包括GET、POST、PUT、DELETE等。下面將逐一介紹這些請求的用法。
get(url, **kwargs)
: 傳送一個GET請求。post(url, data=None, **kwargs)
: 傳送一個POST請求,data
可以是字典、位元組或檔案物件。put(url, data=None, **kwargs)
: 傳送一個PUT請求。delete(url, **kwargs)
: 傳送一個DELETE請求。head(url, **kwargs)
: 傳送一個HEAD請求,只獲取頁面的HTTP頭資訊。options(url, **kwargs)
: 傳送一個OPTIONS請求,獲取伺服器支援的HTTP方法。patch(url, data=None, **kwargs)
: 傳送一個PATCH請求。
官網連結:http://docs.python-requests.org/en/master/
2.1 GET請求
GET請求用於從伺服器獲取資料。requests.get方法可以傳送一個GET請求,並返回一個響應物件。
(1.)沒有請求體
(2.)資料必須在1k之內
(3)get請求資料會暴露在瀏覽器的位址列中
在這個示例中,我向部落格園傳送了一個GET請求,並列印了響應的狀態碼和響應內容 。
2.2 POST請求
POST請求用於向伺服器提交資料。requests.post方法可以傳送一個POST請求,並返回一個響應物件。
(1)資料不會出現在位址列中 (2)資料的大小沒有上限 (3)有請求體 (4)請求體中如果存在中文,會使用URL編碼!
requests.post()用法與requests.get()完全一致,特殊的是requests.post()有一個data引數,用來存放請求體資料
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('https://www.cnblogs.com/', data=json_data,headers=headers) 11 12 print(response_json.status_code) 13 print(response_json.text)
2.3 PUT請求
PUT請求用於更新伺服器上的資源。requests.put方法可以傳送一個PUT請求,並返回一個響應物件。
2.4 DELETE請求
DELETE請求用於刪除伺服器上的資源。requests.delete方法可以傳送一個DELETE請求,並返回一個響應物件。
三、請求引數和頭資訊
在實際應用中,通常需要在請求中包含引數和頭資訊。requests模組提供了便捷的方式來新增這些資訊。
3.1 URL引數
可以使用params引數向URL中新增查詢引數。
3.2 請求頭
可以使用headers引數新增自定義請求頭。
四、響應處理
requests模組返回的響應物件包含豐富的資訊和方法,方便我們處理HTTP響應。
# 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 狀態碼
可以透過響應物件的status_code屬性獲取HTTP狀態碼。
1 import requests 2 3 response = requests.get('https://www.cnblogs.com/') 4 5 print(response.status_code) 6 print(response.text) 7 print(response.content)
五、檔案上傳和下載
在實際應用中,常常需要上傳和下載檔案。requests模組提供了便捷的檔案處理方法。
5.1 檔案下載
可以使用files引數下載檔案。
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模組可以自動處理Cookies,並允許手動設定和獲取Cookies。
6.1 自動處理Cookies
1 import requests 2 3 # 建立一個 Session 物件 4 session = requests.Session() 5 6 # 登入的目標 URL 7 # login_url = 'https://example.com/login' 8 login_url = 'https://www.cnblogs.com/' 9 10 # 登入所需的表單資料 11 login_data = { 12 'username': 'jh', 13 'password': '123', 14 } 15 16 # 傳送 POST 請求進行登入 17 response = session.post(login_url, data=login_data) 18 19 print("登入響應狀態碼:", response.status_code) 20 21 if response.ok: 22 print("登入成功!") 23 24 # 登入後訪問另一個需要身份驗證的頁面 25 protected_url = 'https://example.com/protected' 26 protected_response = session.get(protected_url) 27 28 if protected_response.ok: 29 print("訪問受保護頁面成功!") 30 print(protected_response.text) # 列印受保護頁面的內容 31 else: 32 print("訪問受保護頁面失敗,狀態碼:", protected_response.status_code) 33 else: 34 print("登入失敗,狀態碼:", response.status_code)