Python3自帶的http.client和urllib.request都能發(fā)送http請求,不過相對來說使用較麻煩,第三方庫requests讓發(fā)送請求更簡單,支持自動編碼解碼,會話保持,長連等
requests安裝
- Windows: 打開cmd命令行,輸入pip install requests,等待安裝完成即可
- Linux: (建議使用Python3),終端中輸入pip3 install requests,等待安裝完成即可
- Mac: (建議使用Python3), sudo python3 -m pip install requests,等待安裝完成即可
驗證是否安裝成功: - 打開命令行,輸入python,在python shell環(huán)境下輸入import requests 沒有報錯即安裝成功
- 在編輯器中輸入 import requests 沒有報錯即安裝成功
requests的使用
-
發(fā)送請求分三步
1,組裝請求: 請求可能包含url,params(url參數(shù)),data(請求數(shù)據(jù)),headers(請求頭),cookies等,最少必須有url
2,發(fā)送請求,獲取響應(yīng):支持get,post等各種方法發(fā)送,返回的是一個響應(yīng)對象
3,解析響應(yīng): 輸出響應(yīng)文本
1,發(fā)送一個帶參數(shù)的post請求
headers = {
'content-type': 'application/x-www-form-urlencoded',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}
URL = 'https://******123xue.cn/fs/uc/accessToken/create'
# requests 允許使用 params 關(guān)鍵字參數(shù),以一個字符串字典來提供這些參數(shù)。
payload={
'corpId': 'fa6aeddc25a848b4bd9e8b925d8c6182',
'account': '******',
'pwd': '******',
'useMobile': False
}
res = requests.post(url=URL, data=payload, headers=headers)
# 這里返回的是一個json字符串,所以轉(zhuǎn)換成json格式,注意json后面帶括號
res = res.json()
注:1,有些請求的headers可以不填,這里是業(yè)務(wù)需要。
2,發(fā)送put、delete、head、optiions請求也很簡單
r = requests.put('http://yunweicai.com/put', data = {'key':'value'})
r = requests.delete('http://yunweicai.com/delete')
r = requests.head('http://yunweicai.com/get')
r = requests.options('http://yunweicai.com/get')
請求參數(shù)
- url: 字符串格式,參數(shù)也可以直接寫到url中
- params:url參數(shù),字典格式
- data: 請求數(shù)據(jù),字典或字符串格式
- headers: 請求頭,字典格式
- cookies: 字典格式,可以通過攜帶cookies繞過登錄
- files: 字典格式,用于混合表單(form-data)中上傳文件
- auth: Basic Auth授權(quán),數(shù)組格式 auth=(user,password)
- timeout: 超時時間(防止請求一直沒有響應(yīng),最長等待時間),數(shù)字格式,單位為秒
響應(yīng)解析
- res.status_code: 響應(yīng)的HTTP狀態(tài)碼
- res.reason: 響應(yīng)的狀態(tài)碼含義
- req.text:響應(yīng)的文本格式,按req.encoding解碼
- req.content: 響應(yīng)的二進制格式
- req.encoding: 解碼格式,可以通過修改req.encoding='utf-8'來解決一部分中文亂碼問題
- req.apparent_encoding:真實編碼,由chardet庫提供的明顯編碼
- req.json(): (注意,有括號),響應(yīng)的json對象(字典)格式,慎用!如果響應(yīng)文本不是合法的json文本,或報錯
- req.headers: 響應(yīng)頭
- req.cookies: 響應(yīng)的cookieJar對象,可以通過req.cookies.get(key)來獲取響應(yīng)cookies中某個key對應(yīng)的值