外贸建站 wordpress,网站实现,企业做网站设置哪些模块,淮北专业网站建设#xff08;文章内容仅作学习交流使用#xff09;
urllib3是一个功能强大、条理清晰#xff0c;用于HTTP客户端的第三方模块
urllib3-发送网络请求
使用urllib3发送网络请求时#xff0c;需要先创建PoolManager对象#xff0c;并使用该对象的request方法发送请求#…文章内容仅作学习交流使用
urllib3是一个功能强大、条理清晰用于HTTP客户端的第三方模块
urllib3-发送网络请求
使用urllib3发送网络请求时需要先创建PoolManager对象并使用该对象的request方法发送请求request方法的语法如下
request(method,url,fieldsNone,headersNone,retries3timeout0.1)
#method用于指定请求方式
#fields与headers分别用于指定请求参数与请求头
#retries为重试请求次数默认为3次
#timeout为可选参数用于设置超时
使用urllib3发送GET请求并获取状态
import urllib3 # 导入urllib3模块
urllib3.disable_warnings() # 关闭ssl警告
url http://baidu.com
http urllib3.PoolManager() # 创建连接池管理对象
r http.request(GET,url) # 发送GET请求
print(r.status) # 打印请求状态码
一个连接管理池PoolManager可以同时向多个服务器发送请求
jd_url https://www.jd.com/
csdn_url https://csdn.net/
baidu_url https://www.baidu.com/
http urllib3.PoolManager()
r1 http.request(GET,jd_url)
r2 http.request(GET,csdn_url)
r3 http.request(GET,baidu_url)
发送POST请求时除了将method设置成POST还需要将字典参数传入fields中
url https://www.httpbin.org/post # post请求测试地址
params {name:Jack,country:中国,age:30} # 定义字典类型的请求参数
http urllib3.PoolManager() # 创建连接池管理对象
r http.request(POST,url,fieldsparams) # 发送POST请求
print(返回结果,r.data.decode(unicode_escape))
处理响应内容
发送网络请求后将返回一个HTTPResponse对象通过该对象中的info方法可以获取响应头信息字典类型
http urllib3.PoolManager() # 创建连接池管理对象
r http.request(GET,url) # 发送GET请求,默认重试请求
for key in r.info().keys(): # 循环遍历打印响应头信息print(key,:,response_header.get(key))
可以将服务器返回的JSON信息转换成字典类型取需要的条目即可
url https://www.httpbin.org/post # post请求测试地址
params {name:Jack,country:中国,age:30} # 定义字典类型的请求参数
http urllib3.PoolManager() # 创建连接池管理对象
r http.request(POST,url,fieldsparams) # 发送POST请求
j json.loads(r.data.decode(unicode_escape)) # 将响应数据转换为字典类型
print(数据类型,type(j))
print(获取form对应的数据,j.get(form))
print(获取country对应的数据,j.get(form).get(country))
获取二进制数据时可以做出相应处理比如二进制图片数据可以实际上其他类型也可以使用open函数转换为图片文件运行如下代码之后相应图片会保存在项目根目录中
url https://www.sdu.edu.cn/images/20240801.png # 图片请求地址
http urllib3.PoolManager() # 创建连接池管理对象
r http.request(GET,url) # 发送网络请求
print(r.data) # 打印二进制数据
f open(20240801.png,wb) # 创建open对象
f.write(r.data) # 写入数据
f.close() # 关闭
复杂请求的发送
设置请求头
大多数服务器都会检测请求头信息我们需要提前获取想要模拟的浏览器的请求头并以字典形式传入request的header参数中获取浏览器的有效请求头方法如下 获取到请求头后需要在request中进行设置
url https://www.httpbin.org/get # get请求测试地址
# 定义火狐浏览器请求头信息
headers {user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36}
http urllib3.PoolManager() # 创建连接池管理对象
r http.request(GET,url,headersheaders) # 发送GET请求
print(r.data.decode(utf-8)) # 打印返回内容
设置代理IP
设置代理IP需要创建ProxyManager对象并填写proxy_url代理IP与headers两个参数
headers {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0}
proxy urllib3.ProxyManager(http://120.27.110.143:80,headers headers) # 创建代理管理对象
r proxy.request(get,url,timeout2.0) # 发送请求
print(r.data.decode()) # 打印返回结果
上传文件
可以通过fields将文本文件作为参数上传
import urllib3 # 导入urllib3模块
import json # 导入json模块
with open(test.txt) as f: # 打开文本文件data f.read() # 读取文件
http urllib3.PoolManager() # 创建连接池管理对象
r http.request( POST,http://httpbin.org/post,fields{filefield: (example.txt, data),}) # 发送网络请求
files json.loads(r.data.decode(utf-8))[files] # 获取上传文件内容
print(files) # 打印上传文本信
在request方法中指定body参数对应的值为文件的二进制数据还要使用headers参数指定文件类型
import urllib3 # 导入urllib3模块
with open(python.jpg,rb) as f: # 打开图片文件data f.read() # 读取文件
http urllib3.PoolManager() # 创建连接池管理对象
# 发送请求
r http.request(POST,http://httpbin.org/post,body data,headers{Content-Type:image/jpeg})
print(r.data.decode()) # 打印返回结果