我正在使用请求访问RESTful API.一切似乎都正常.我可以进行身份验证,收回会话令牌,甚至可以对我为API编写的类中的方法进行单元测试.然后我试着运行我的代码.

首先,这是我的电话.标题是在init()中设置的与静态会话相关的项.主体是根据文件中的数据动态构建的,并传递给该函数.所有数据都是有效的.

response = requests.post(url, headers=(Requestheader), data=json.dumps((Requestbody)))

当我运行代码时,它用我提供的元数据更新了100多条记录.在150号物品附近,我得到以下信息:

ssl.SSLCertVerificationError:[SSL:证书验证失败]

我的第一步是打电话给供应商,看看他们所有的网络服务器是否都有正确签名的证书,认为他们在平衡我的负载,我发现了一个配置错误的服务器.他们告诉我情况并非如此.

然后我在谷歌上搜索了这条消息,发现有一个verify kwarg,于是我try :

response = requests.post(url, headers=Requestheader, data=json.dumps(Requestbody), verify=False)

我知道从长远来看这并不理想,但我想测试一下,看看这种行为是否相同.它也做了同样的事情.它运行了一段时间并抛出了ssl错误.我认为verify=False的意思是它不会判断.

供应商建议我判断我正在使用的url,但没关系.我认为,如果有代理服务器或真正的中间人攻击导致问题,在失败之前,我不会看到这么多次成功.我想这可能是一个会话超时,但这应该会抛出一个401状态,我的活动级别太高,不适合非活动超时.

我是python noob,不是安全专家.感谢您的建议.

推荐答案

在我看来,这个问题可能有三个解决方案:

  1. 证书没问题,代码有问题.例如,在使用this solution中所述的准备好的请求时,可能会出现问题

    但我真的不认为这是你的情况,因为在你提供的代码片段中没有使用这样的方法.对于接下来的两个变体,您需要获取导致错误的URL并查看其证书(可以通过浏览器完成).

  2. 证书可以,但签名的证书颁发机构不包括在请求库使用的CA列表中.在你打开一个令人不安的URL后,判断CA,看看它的日期是否有效,它是否包含在this个列表中.如果没有,请将CA添加到请求库的受信任列表中——如本StackOverflow question的答案所述.

  3. 证书无效或自行签署.与第2条中的解决方案相同.

一般的解决方案是将脚本包装在try except子句中,并打印出所有会导致错误的URL.然后try 通过请求库逐个请求,看看是否出现问题.如果是的话,就是(2)或(3)种情况.如果没有,请try 在另一台安装了新python和请求的机器上运行脚本.如果运行成功,那么您的配置中就会出现一些问题.

Python-3.x相关问答推荐

Pyvis和Networkx:如何根据源或目标使 node colored颜色 不同

如何绘制交叉验证的AUROC并找到最佳阈值?

在Pandas 数据帧中为小于5位的邮政编码添加前导零

将自定义函数应用于 pandas 数据框的每一列

命名空间前缀无效

requests.exceptions.InvalidSchema:未找到连接适配器.我试图遍历一个列表

使用Python按照其组/ID的紧密值的递增顺序映射数据框的两列

如何在Pandas 中按条件计算分组?

使用 pandas 进行多类分类的总体准确度

ImportError:无法从jinja2导入名称escape

Python:获取未绑定的类方法

为什么 f-strings 比 str() 更快地解析值?

Pandas 将列格式化为货币

Python socket.error: [Errno 13] 权限被拒绝

python 3.7 websockets的1006连接异常关闭错误

如何确定一个类的元类?

为什么 Django South 1.0 使用 iteritems()?

如何将 SimpleGUI 与 Python 2.7 和 3.0 shell 集成

使用 Python3 与 HDFS 交互的最佳模块是什么?

使用完整路径激活 conda 环境