写点什么

软件测试 / 测试开发丨 Python 常用第三方库 urllib3

作者:测试人
  • 2023-08-17
    北京
  • 本文字数:2039 字

    阅读完需:约 7 分钟

免费领取:测试资料+测试用例+简历模板+测试文档

本文为霍格沃兹测试开发学社学员学习笔记分享

原文链接:https://ceshiren.com/t/topic/26333

urllib3 概述

  • 线程安全

  • 连接池管理

  • 客户端 SSL/TLS 验证

  • 支持 HTTP 和 SOCKS 代理


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 urllib3import 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 urllib3import 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 urllib3import 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 urllib3import 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 urllib3import 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 urllib3import 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')))
复制代码


用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
软件测试/测试开发丨Python 常用第三方库 urllib3_Python_测试人_InfoQ写作社区