【python】(十九)python常用第三方库——urllib3

【python】(十九)python常用第三方库——urllib3Urllib3 是一个功能强大 条理清晰 用于 HTTP 客户端的 Python 库 许多 Python 的原生系统已经开始使用 urllib3

大家好,欢迎来到IT知识分享网。


1. urllib3 概述

官方文档:https://urllib3.readthedocs.io/en/stable/

Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库,许多Python的原生系统已经开始使用urllib3。Urllib3提供了很多python标准库里所没有的重要特性:

  • 线程安全
  • 连接池管理
  • 客户端 SSL/TLS 验证
  • 支持 HTTP 和 SOCKS 代理
  • ……

2. urllib3 安装

通过 pip 安装

pip install urllib3 

3. urllib3 发送 HTTP 请求

  • 导入 urllib3 模块
  • 创建 PoolManager 实例
  • 调用 request() 方法
import urllib3 def test_HTTP(): # 创建连接池对象,默认会校验证书 pm = urllib3.PoolManager() # 发送HTTP请求 res = pm.request(method='GET', url="http://httpbin.org/robots.txt") print(type(res)) """ 打印结果: <class 'urllib3.response.HTTPResponse'> """ 

4. urllib3 HTTPResponse 对象

  • status 属性
  • headers 属性
  • data 属性
 import urllib3 def test_response(): # 创建连接池对象 pm = urllib3.PoolManager() # 发送请求 resp = pm.request(method='GET', url="http://httpbin.org/ip") print(resp.status) # 查看响应状态状态码 print(resp.headers) # 查看响应头信息 print(resp.data) # 查看响应原始二进制信息 

5. urllib3 解析响应内容

  • 二进制响应内容解码
  • JSON 字符串
import urllib3 import json def test_response(): pm = urllib3.PoolManager() resp = pm.request(method='GET', url="http://httpbin.org/ip") # 获取二进制形式的响应内容 raw = resp.data print(type(raw), raw) # 使用utf-8解码成字符串 content = raw.decode('utf-8') print(type(content), content) # 将JSON字符串解析成字典对象 dict_obj = json.loads(content) print(type(dict_obj), dict_obj) print(dict_obj['origin']) 

6. urllib3 request 请求参数

  • 语法:request(method, url, fields, headers, )
  • 必填
    • method:请求方式
    • url:请求地址
  • 选填
    • headers:请求头信息
    • fields:请求体数据
    • body:指定请求体类型
    • tiemout:设置超时时间

7. urllib3 定制请求数据

7.1. 定制请求头信息

  • 使用 headers 参数
import urllib3 import json def test_headers(): pm = urllib3.PoolManager() url = "http://httpbin.org/get" # 定制请求头 headers = { 
    'School': 'hogwarts'} resp = pm.request('GET', url, headers=headers) 

7.2. 定制查询字符串参数

  • fields 参数:适用于GET, HEAD, DELETE 请求
  • 拼接url:适用于POST, PUT请求
import urllib3 import json # GET/HEAD/DELETE 请求 def test_fields(): pm = urllib3.PoolManager() url = "http://httpbin.org/get" fields = { 
    'school': 'hogwarts'} resp = pm.request(method='GET', url=url, fields=fields) # POST/PUT 请求 def test_urlencode(): # 从内置库urllib的parse模块导入编码方法 from urllib.parse import urlencode pm = urllib3.PoolManager() url = "http://httpbin.org/post" # POST和PUT请求需要编码后拼接到URL中 encoded_str = urlencode({ 
    'school': 'hogwarts'}) resp = pm.request('POST', url=url+"?"+encoded_str) 

7.3. 提交 form 表单数据

  • 类型 'Content-Type': 'multipart/form-data
  • 请求方式:POST、PUT
import urllib3 import json # POST/PUT 请求 def test_form(): pm = urllib3.PoolManager() url = "http://httpbin.org/post" fields = { 
    'school': 'hogwarts'} # fields数据会自动转成form格式提交 resp = pm.request('POST', url, fields=fields) 

7.4. 提交 JSON 格式数据

  • 类型:'Content-Type': 'application/json'
  • 请求方式:POST、PUT
import urllib3 import json def test_json(): pm = urllib3.PoolManager() url = "http://httpbin.org/post" # 设定请求体数据类型 headers={ 
    'Content-Type': 'application/json'} # JSON文本数据 json_str = json.dumps({ 
    'school': 'hogwarts'}) resp = pm.request('POST', url, headers=headers, body=json_str) 

7.5. timeout :设置超时时间

  • 时间单位:秒
  • 值的格式:float 类型
import urllib3 def test_timeout(): pm = urllib3.PoolManager() # 访问这个地址,服务器会在3秒后响应 url = "http://httpbin.org/delay/3" # 设置超时时长 resp = pm.request(method='GET', url=url, timeout=4.0) assert resp.status == 200 

8. urllib3 发送 HTTPS 请求

  • HTTPS 请求默认需要校验证书
  • PoolManager 的 cert_reqs 参数
    • "CERT_REQUIRED":需要校验
    • "CERT_NONE":取消校验
import urllib3 import json def test_HTTPS(): # 创建不校验证书的连接池对象 pm_https = urllib3.PoolManager(cert_reqs="CERT_NONE") url = "https://httpbin.ceshiren.com/get" # 发送HTTPS请求 resp = pm_https.request(method='GET', url=url) print(json.dumps(resp.data.decode('utf-8'))) 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/114790.html

(0)
上一篇 2025-12-06 17:45
下一篇 2025-12-06 18:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信