Python 的 urllib3
库是一个强大的HTTP客户端库,用于发送HTTP请求和处理HTTP响应。它提供了连接池、文件上传、会话管理等功能,支持HTTP/1.1、连接复用和持久连接。urllib3
还提供了多种异常类型,用于处理请求过程中可能出现的错误。它是许多高阶HTTP客户端库的基础,如 requests
库,用于实现更复杂的网络通信和数据传输任务。
pip install urllib3
import urllib3
import json
http = urllib3.PoolManager()
http = urllib3.PoolManager(timeout=3.0) # 让所有的request都遵循一个timeout限时
# 创建PoolManager对象生成请求,
# 由该实例对象处理与线程池的连接以及线程安全的所有细节
def req(url):
try:
# url
url = url
# 请求头
# header = {
# 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64)',
# 'Host':'httpbin.org'
# }
# body
# 请求体
data = {
'word':'hello'
}
data = json.dumps(data).encode()
# json.dumps方法可以将python对象转换为json对象
# body
# 二进制文件
# with open('xxx.jpg','rb') as f2:
# data = f2.read()
# fields
# 使用multipart/form-data编码方式上传文件
# 可以使用和传入Form data数据一样的方法进行
# 并将文件定义为一个元组的形式
# (file_name,file_data):
# with open('1.txt','r+',encoding='UTF-8') as f:
# file_read = f.read()
# request(self, method, url, fields=None, headers=None, **urlopen_kw)
response = http.request('GET', url) # get方式请求
response = http.request('POST', url, body=data, headers=header)
response = http.request('POST', url, body=data, headers=header, timeout=3.0) # 限时
response = http.request('POST', url, body=data, headers=header, retries=5) # 重试,默认3次
response = http.request('POST', url, body=data, headers=header, redirect=False) # 重定向
response = http.request('POST', url, fields={'filefield':('1.txt', file_read, 'text/plain')})
response_status = response.status
response_data = response.data.decode('utf-8')
print(response_status) # 获得状态码
print(response_data) # html源码(utf-8解码)
text = json.loads(response_data)
# 如果返回 {"msg":"ok"}
msg = text["msg"]
print(msg)
except:
print("失败")
print(response_status)
raise
def run():
try:
url = ""
r = req(url)
print(r)
except:
print(r)
if __name__ == "__main__":
run()