我正在使用 requests 访问一个 RESTful API。一切似乎都正常。我可以进行身份验证,获取会话令牌,甚至对编写的用于该API的类中的方法进行单元测试。然后我尝试运行我的代码。
首先,这是我所做的调用。头部是静态的与会话相关的项目,在 init() 中设置。请求体根据文件中的数据动态构建,并传递到此函数中。所有的数据都是有效的。
response = requests.post(url, headers=(Requestheader), data=json.dumps((Requestbody)))
当我运行代码时,它会使用我提供的元数据更新100多条记录。大约在第150个条目附近,我会收到以下错误信息:ssl.SSLCertVerificationError: [SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败:证书链中存在自签名证书(_ssl.c:1045)
我的第一步是致电供应商,了解他们所有的Web服务器是否都有正确签名的证书,因为我认为他们正在对我进行负载均衡并找到一个配置错误的服务器。他们告诉我不是这种情况。
然后我在谷歌上搜索了这个消息并发现有一个verify kwarg选项,所以我尝试了:
response = requests.post(url, headers=Requestheader, data=json.dumps(Requestbody), verify=False)
我知道这不是长期理想的解决方案,但我想测试一下行为是否相同。结果是一样的。它运行了一段时间,然后抛出ssl错误。我以为verify=False的想法是它不会检查。
供应商建议我检查我正在使用的url,但它很好。如果有代理服务器或真正的中间人攻击引起问题,我认为我在失败之前不会看到这么多成功。我以为可能是会话超时,但那应该抛出401状态,而我的活动水平太高了,不会发生不活动超时。
我是python新手,也不是安全专家。欢迎提供建议。
requests
?你应该尝试添加更多的调试或捕获流量,以查看您获取的每个证书,并查看发生了什么变化。在所有情况下,verify=False
都不是应该保留的东西。 - Patrick Mevzek