requests模組

认真的六六發表於2024-11-01

一、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)

相關文章