首页 > 编程语言 >Python 常用第三方库 urllib3使用

Python 常用第三方库 urllib3使用

时间:2024-05-14 17:11:14浏览次数:10  
标签:请求 Python resp urllib3 url import 第三方 pm

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

标签:请求,Python,resp,urllib3,url,import,第三方,pm
From: https://www.cnblogs.com/hogwarts/p/18191739

相关文章

  • Python实现简易版选课系统
    需求:一、创建学生类#创建学生类importrandomclassStudent:def__init__(self,num,name,address,course_lst=None):self.num=numself.name=nameself.address=addressifcourse_lst:self.cous_lst=cous_lst......
  • python列表中切片的正负数
    先说结论:列表切片的格式为[start:end:step]其中step代表步长,即每从start位置开始每隔几个元素取一个值step为正数时表示切片取值方向为:从左往右;为负数时:从右往左start,end代表切片取值的起始和结束位置,请注意这个词:位置,我们假设可以取值的范围是数学中x坐标轴......
  • Python如何访问闭包中的变量
    你想要扩展函数中的某个闭包,允许它能访问和修改函数的内部变量。解决方案通常,闭包的内部变量对外界是完全隐藏的。但可以编写访问函数,将其作为函数属性绑定到闭包上来实现访问。defsample():n=0#闭包函数deffunc():print('n=',n)#属性n的......
  • Python中如何避免字典和元组的多重嵌套的方法
    一、字典、元组的多重嵌套例1:记录全班学生的成绩。分析:定义一个SimpleGradebook类,学生名是字典self._grades的键,成绩是字典self._grades的值。classSimpleGradebook():def__init__(self):self._grades={}defadd_student(self,name):self.......
  • python类函数定义第一个参数必须是self
     如果不写self,则会报错   加上之后错误就会消失 ......
  • Python 内置正则表达式库re的使用
    什么是正则表达式正则表达式就是记录文本规则的代码可以查找操作符合某些复杂规则的字符串使用场景处理字符串处理日志在python中使用正则表达式把正则表达式作为模式字符串正则表达式可以使用原生字符串来表示原生字符串需要在字符串前方加上r'string'#匹配......
  • 爬虫 python的第一天
    1、安装pycharm及python相关的安装2、新建python项目3、引包 importrequestspipinstallrequests4、打开网页,找打你想要爬的数据URL 5、写代码获取到对应的数据,保存到本地。importrequestsurl="https://sns-video-al.xhscdn.com/stream/110/259/01e640315b0ef......
  • Python 内置库 多线程threading使用讲解
    线程基本使用单线程defmain():print("在扔一个苹果")if__name__=="__main__":main()多线程Python提供了thread、threading等模块来进行线程的创建与管理,后者在线程管理能力上更进一步,因此我们通常使用threading模块。创建一个线程需要指定该线程执行的任务(函......
  • Python 中寻找列表最大值位置的方法
    前言在Python编程中,经常需要对列表进行操作,其中一个常见的任务是寻找列表中的最大值以及其所在的位置。本文将介绍几种方法来实现这个任务。方法一:使用内置函数max()和index()Python提供了内置函数max()来找到列表中的最大值,同时可以使用index()方法找到该最大值在......
  • 实现Python日志点击跳转到代码位置的方法
    前言在软件开发过程中,日志是一种非常重要的工具,用于记录程序运行时的状态、错误信息以及调试信息。当程序出现问题时,定位到具体的代码位置对于排查问题至关重要。本文将介绍如何在Python日志中实现点击跳转到代码位置的功能,以提高调试效率。为什么需要点击跳转功能?通常情况下,......