【Python与AI基础】Python编程基础:利用Requests库处理HTTP
一、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)