Python 常用第三方库 urllib3使用

简介: `urllib3`是线程安全的HTTP客户端库,支持连接池管理、SSL/TLS验证、HTTP/SOCKS代理。要安装它,使用`pip install urllib3`。发送HTTP请求涉及创建`PoolManager`实例并调用`request()`方法。HTTPResponse对象有status、headers和data属性。可以解码响应内容,处理JSON数据。`request()`方法接受`method`、`url`等参数,可定制请求头、查询字符串、表单数据或JSON数据,并设置超时时间。HTTPS请求默认校验证书,可通过`cert_reqs`参数禁用此功能。

urllib3 概述

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

官方文档:urllib3 2.0.4 documentation

urllib3 安装

  • 通过 pip 安装
pip install urllib3

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))

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)  # 查看响应原始二进制信息

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'])

urllib3 request 请求参数

  • 语法:request(method, url, fields, headers, **)

  • 必填

    • method:请求方式
    • url:请求地址
  • 选填

    • headers:请求头信息
    • fields:请求体数据
    • body:指定请求体类型
    • tiemout:设置超时时间

urllib3 定制请求数据

  • 定制请求头信息
  • 使用 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)

urllib3 定制请求数据

  • 定制查询字符串参数

    • fields 参数:适用于GET, HEAD, DELETE 请求
    • 拼接url:适用于POST, PUT请求

urllib3 定制请求数据

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)

urllib3 定制请求数据

  • 提交 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)

urllib3 定制请求数据

  • 提交 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)

urllib3 定制请求数据

  • 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

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')))
相关文章
|
8月前
|
自然语言处理 数据可视化 搜索推荐
Python第三方库概览
Python第三方库概览
98 0
|
9月前
|
Python
Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!
Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!
160 0
|
11天前
|
Python
pip批量安装python第三方库
pip批量安装python第三方库
|
9月前
|
Linux Shell Python
python第三方库 pip install速度慢的解决办法
python第三方库 pip install速度慢的解决办法
238 0
|
8天前
|
机器学习/深度学习 数据处理 算法框架/工具
Python标准库与第三方库:强大的编程资源
Python标准库与第三方库:强大的编程资源
|
18天前
|
数据采集 自然语言处理 搜索推荐
一篇博客带你领略学习Python的第三方库---如何获取和安装第三方库,关于三种常见第三方库的下载和讲解(pyinstall库,jieba库,wordcloud库),更多第三方库的分类介绍
一篇博客带你领略学习Python的第三方库---如何获取和安装第三方库,关于三种常见第三方库的下载和讲解(pyinstall库,jieba库,wordcloud库),更多第三方库的分类介绍
|
18天前
|
Python
python 使用urllib3获取请求状态
使用Python的urllib3库获取HTTP请求状态,首先通过`pip install urllib3`安装库。然后,导入urllib3,定义函数`get_request_status`,它使用`PoolManager`发送GET请求并返回响应状态码。示例代码中展示了如何测试函数以打印指定URL(如'https://www.example.com')的请求状态。实际应用时需考虑异常处理和错误情况。
20 1
|
18天前
|
机器学习/深度学习 数据可视化 算法框架/工具
Python第三方库
Python第三方库
|
7月前
|
监控 Unix Linux
[linux性能优化]python第三方库-PSUtil库
PSUtil库是Python的一个第三方库,它可以访问各种系统信息和资源利用率,如CPU,内存,磁盘,网络接口,进程等。在Linux、Windows、Mac OS X、FreeBSD等操作系统中,PSUtil提供了一致的接口,这使得它成为了Python系统管理和监控的有力工具。
|
7月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据分析的第三方库
ython作为一种简单易学、功能强大的编程语言,逐渐成为数据分析领域的首选工具。在Python数据分析中,有许多优秀的第三方库可以帮助我们进行数据处理、可视化和建模。