【Python與AI基礎】Python編程基礎:利用Requests庫處理HTTP
配套視頻課程:
【AI人工智能實戰】 Python編程基礎92集全套完整版(附完整版源碼資料)
一、HTTP協議回顧
1、請求類型
(1)GET:用於通過指定URL地址訪問
(2)POST:URL地址+請求數據,將請求數據提交給服務器
(3)PUT:與POST類似,主要用於Restful風格,用於更新數據
(4)DELETE:請求刪除某個資源
2、響應類型
(1)1XX:信息
(2)2XX:正常
(3)3XX:重定向
(4)4XX:客户端錯誤
(5)5XX:服務器錯誤
3、Session/Cookie
(1)HTTP協議是無狀態協議,利用Sessoin/Cookie。
(2)HTTP協議是單次通信,只有客户端發起請求,服務器端才會被動響應,反過來則不行。
4、其他補充
(1)HTTP協議簇包含:HTTP / HTTPS / WebSocket(實現了基於HTTP協議的全雙工通信) / HLS(音頻、視頻, m3u8) / SOAP(Web Service)
(2)HTTP協議屬於應用層的文本型協議
(3)HTTP協議可以上傳和下載任意類型的文件(傳輸二進制文件)
(4)HTTP協議在互聯網佔比90%以上,原因:協議相對簡單容易實現、有標準的Web服務器(Apache, Nginx, Tomcat, IIS等)
二、Requests庫處理HTTP
1、發送Get和Post請求
# 發送GET請求
resp = requests.get('http://localhost:8080/woniusales/')
resp.encoding = 'utf-8' # 設置編碼格式
print(resp.text) # 打印響應正文
# 發送POST請求
data = {'username':'admin', 'password':'admin123', 'verifycode':'0000'}
resp = requests.post(url='http://localhost:8080/woniusales/user/login', data=data)
print(resp.text)
print(resp.headers) # 打印響應頭
if resp.text == 'login-pass': # 對響應進行判斷
print("登錄成功")
else:
print("登錄失敗")
# 登錄成功後獲取響應的Cookie,用於在後續請求中使用
cookie = resp.cookies
2、文件上傳下載
# 下載圖片
resp = requests.get('http://www.woniunote.com/img/banner-1.jpg')
with open('./banner.jpg', mode='wb') as file:
file.write(resp.content)
# 文件上傳
file = {'batchfile': open('E:/Other/SaleList-20171020-Test.xls', 'rb')}
data = {'batchname': 'GB20211009'}
resp = requests.post(url='http://localhost:8080/woniusales/goods/upload', data=data, files=file, cookies=cookie)
print(resp.text)
3、利用session對象維持狀態
session = requests.session()
data = {'username':'admin', 'password':'admin123', 'verifycode':'0000'}
resp = session.post(url='http://localhost:8080/woniusales/user/login', data=data)
file = {'batchfile': open('E:/Other/SaleList-20171020-Test.xls', 'rb')}
data = {'batchname': 'GB20211007'}
resp = session.post(url='http://localhost:8080/woniusales/goods/upload', data=data, files=file)
print(resp.text)
print(type(resp.text))
# 利用Python直接處理JSON
import json
list = json.loads(resp.text) # 將字符串反序列化成List+Dict的Python對象
print(list)
print(type(list))
print(list[1]['goodsname']) # 輸出字典的某個值
4、處理HTTPS
resp = requests.get('https://www.woniuxy.cn', verify=False) # 忽略證書
print(resp.text)