全網最全requests庫和requests模塊使用詳解(代碼詳解)

測試店小二 發佈 2022-05-24T04:01:38.475596+00:00

一、requests簡介簡介:使用requests可以模擬瀏覽器的請求,比起之前用的urllib,requests模塊的api更加便捷(本質就是封裝了urllib3)注意:requests庫發送請求將網頁內容下載下來以後,並不會執行js代碼,這需要我們自己分析目標站點然後發起新的

一、requests簡介

簡介:使用requests可以模擬瀏覽器的請求,比起之前用的urllib,requests模塊的api更加便捷(本質就是封裝了urllib3)

注意:requests庫發送請求將網頁內容下載下來以後,並不會執行js代碼,這需要我們自己分析目標站點然後發起新的request請求

安裝:pip3 install requests

各種請求方式:常用的就是requests.get()和requests.post()

二 、基於requests之GET請求

1、基本請求

2、帶參數的GET請求->params

在請求頭內將自己偽裝成瀏覽器,否則百度不會正常返回頁面內容

如果查詢關鍵詞是中文或者有其他特殊符號,則不得不進行url編碼

Python自動化測試全套視頻資料免費領取

上述操作可以用requests模塊的一個params參數搞定,本質還是調用urlencode

3、帶參數的GET請求->headers

通常我們在發送請求時都需要帶上請求頭,請求頭是將自身偽裝成瀏覽器的關鍵,常見的有用的請求頭如下

添加headers(瀏覽器會識別請求頭,不加可能會被拒絕訪問,比如訪問https://www.zhihu.com/explore)

4、帶參數的GET請求->cookies

登錄github,然後從瀏覽器中獲取cookies,以後就可以直接拿著cookie登錄了,無需輸入用戶名密碼

三 、基於POST請求

GET請求

HTTP默認的請求方法就是GET

1.沒有請求體

2.數據必須在1K之內

3.GET請求數據會暴露在瀏覽器的地址欄中

GET請求常用的操作:

1. 在瀏覽器的地址欄中直接給出URL,那麼就一定是GET請求

2. 點擊頁面上的超連結也一定是GET請求

3. 提交表單時,表單默認使用GET請求,但可以設置為POST

POST請求

1.數據不會出現在地址欄中

2.數據的大小沒有上限

3.有請求體

4.請求體中如果存在中文,會使用URL編碼!

#!!!requests.post()用法與requests.get()完全一致,特殊的是requests.post()有一個data參數,用來存放請求體數據

2、發送POST請求,模擬瀏覽器的登錄行為

對於登錄來說,應該輸錯用戶名或密碼然後分析抓包流程,用腦子想一想,輸對了瀏覽器就跳轉了,還分析個毛線,累死你也找不到包

一 目標站點分析

瀏覽器輸入https://github.com/login

然後輸入錯誤的帳號密碼,抓包

發現登錄行為是post提交到:https://github.com/session

而且請求頭包含cookie

而且請求體包含:

commit:Sign in

utf8:✓

authenticity_token:lbI8IJCwGslZS8qJPnof5e7ZkCoSoMn6jmDTsL1r/m06NLyIbw7vCrpwrFAPzHMep3Tmf/TSJVoXWrvDZaVwxQ==

login:admin

password:123456

二 流程分析

Python自動化測試全套視頻資料免費領取

先GET:https://github.com/login拿到初始cookie與authenticity_token

返回POST:https://github.com/session, 帶上初始cookie,帶上請求體(authenticity_token,用戶名,密碼等)

最後拿到登錄cookie

ps:如果密碼時密文形式,則可以先輸錯帳號,輸對密碼,然後到瀏覽器中拿到加密後的密碼,github的密碼是明文


3、補充

四、 響應Response

1、response屬性

2、編碼的問題

3、獲取二進位數據

import requests
 
response=requests.get('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=123456&di=712e4ef3ab258b36e9f4b48e85a81c9d&imgtype=0&src=http%3A%2F%2Fc.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F11385343fbf2b211e1fb58a1c08065380dd78e0c.jpg')
with open('a.jpg','wb') as f:
    f.write(response.content)
#stream參數:一點一點的取,比如下載視頻時,如果視頻100G,用response.content然後一下子寫到文件中是不合理的
import requests
 
response=requests.get('https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo-transcode/1767502_56ec685f9c7ec542eeaf6eac93a65dc7_6fe25cd1347c_3.mp4',
                      stream=True)
 
with open('b.mp4','wb') as f:
    for line in response.iter_content():
        f.write(line)

4、解析json

5、Redirection and History

五、高級用法

1、SSL Cert Verification

2、使用代理

3、超時設置

4、認證設置

5、異常處理

6、上傳文件

關鍵字: