【Python】request库InsecureRequestWarning的原因

news/2025/1/15 18:03:25/

今天在测试我自己写的api的时候,发现了之前出现的一个warning的真正原因

1.起因

先来看请求api的代码

def ApiRq(account:str,passwd:str,background=''):url = "https://example.com/shop-url"params = { # 参数涉及到隐私,省略}res = requests.get(url,params=params,verify=False) # 请求apireturn res.json()

运行,会出现这个警告

/home/muxue/.local/lib/python3.10/site-packages/urllib3/connectionpool.py:1045: InsecureRequestWarning: Unverified HTTPS request is being made to host 'val.outpost54.top'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings

百度了一下,可以用下面的办法来去掉这个警告

import urllib3 # 屏蔽ssl warning
urllib3.disable_warnings(urllib3.connectionpool.InsecureRequestWarning)

但是这样是不安全的,因为我们没有检查网站的证书,也就无法向服务器发送确认后的加密信息

2.出现这个警告的原因

出现这个警告,其实就是因为我们这里设置了不检查ssl证书

res = requests.get(url,params=params,verify=False) # 请求api

如果你网站的证书是没有问题的,那么完全没有必要不检查,应该使用下面的代码

res = requests.get(url,params=params)

之前我的api站点所用证书缺少证书链,所以出现了另外一个报错,从而使用了verify=False才能正常运行代码,现在更新了证书,也就不需要了!

此时直接运行代码,也不会报错了!

[muxue@bt-7274:~/kook/test]$ py3 api_test.py
start test

3.进一步了解

参考 https://blog.csdn.net/memory_qianxiao/article/details/82011282

requests 库其实是基于 urllib 编写的,对 urllib 进行了封装,使得使用时候的体验好了很多。

现在 urllib 已经出到了3版本,功能和性能自然是提升了不少。所以,requests最新版本也是基于最新的 urllib3 进行封装。

在urllib2时代对https的处理非常简单,只需要在请求的时候加上 verify=False 即可,这个参数的意思是忽略https安全证书的验证,也就是不验证证书的可靠性,直接请求。但这其实是不安全的,因为证书可以伪造,不验证的话就不能保证数据的真实性。

urllib3时代,官方强制验证https的安全证书,如果没有通过是不能通过请求的,虽然添加忽略验证的参数,但是依然会 给出醒目的 Warning


简单说来,就是如果是旧的request库,你可以用 verify=False 禁用掉证书验证,也不会出现报错;但是到 urllib3 后,官方要求一定要验证https证书,所以禁用掉证书验证,就会报出警告。

除非你确认你调用的api是正规的,那么禁用掉证书验证是不应该的!

4.检查一下你的站点ssl证书是否ok

这里给大家推荐一个网站:myssl

在这里输入你的域名,可以检测一下你的ssl证书是否正确部署,我的证书链问题就是在这里检测出来的。

只要是A以上,那就是ok的!


http://www.ppmy.cn/news/20470.html

相关文章

《JavaScript 核心原理解析》学习笔记 Day 13 作用域 对象

在 JavaScript 中,向没有声明的变量名赋值,会隐式地创建一个全局变量;全局变量会被绑定为全局对象(global)的属性。因此,JavaScript 的变量环境(或者全局环境)与对象系统就关联了起来…

【算法】二分法 ② ( 排序数组中查找目标值 | 二分法的经典写法 | 在排序数组中查找元素的最后一个位置 | 二分法的通用模板 )

文章目录一、排序数组中查找目标值 ( 二分法的经典写法 )二、在排序数组中查找元素的最后一个位置 ( 二分法的通用模板 )一、排序数组中查找目标值 ( 二分法的经典写法 ) https://leetcode.cn/problems/binary-search/ 典型的二分查找题目 : 从一个 有序数组 中查找某个 目标值…

Lua 垃圾回收

Lua 垃圾回收 参考至菜鸟教程。 Lua 采用了自动内存管理。 这意味着你不用操心新创建的对象需要的内存如何分配出来, 也不用考虑在对象不再被使用后怎样释放它们所占用的内存。 Lua运行了一个垃圾收集器来收集所有死对象(即在Lua中不可能再访问到的对象&…

LeetCode-26. 删除有序数组中的重复项

目录题目分析双指针理解代码实现题目来源 26. 删除有序数组中的重复项 题目分析 解法: 双指针 首先注意数组是有序的,那么重复的元素一定会相邻。 要求删除重复元素,实际上就是将不重复的元素移到数组的左侧。 考虑用 2 个指针,…

STM32—超声波测距

超声波简介 超声波测距模块是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度, 计算出模块到前方障碍物的距离。 型号:HC-SR04 时序图 怎么让它发送波 Trig触发信号,给Trig端口至少10us的高电平…

Golang如何优雅接入多个远程配置中心?

本文基于viper实现了apollo多实例快速接入,授人以渔,带着大家读源码,详解实现思路,封装成自己的工具类并且开源。 前言 viper是适用于go应用程序的配置解决方案,这款配置管理神器,支持多种类型、开箱即用、…

介绍一款2023年新出的mysql管理工具: FlyBird Database Manager

FlyBird Database Manager 介绍 FlyBird Database Manager 是一款mysql 界面化管理工具, 使用go语言编写,天然支持Windows, MacOS, Linux等主流平台。 提供无需安装的命令行版本, 命令行中启动服务,以html支持UI界面,在浏览器中…

UVM实战笔记(七)

第七章. UVM中的寄存器模型 7.1 寄存器模型简介 7.1.1 带寄存器配置总线的DUT 本章节使用的DUT带寄存器配置,代码如下: module dut(clk,rst_n,bus_cmd_valid,bus_op,bus_addr,bus_wr_data,bus_rd_data,rxd,rx_dv,txd,tx_en)input clk; …