Wincertstore的Python请求 - python

我正在尝试通过请求包连接到公司的内部网页,但是由于python不使用Windows默认受信任的证书,因此连接被拒绝。我发现wincertstore可用于获取Windows默认证书。但是我仍然不确定如何将其与我的请求一起使用。下面是到目前为止我尝试过的代码.............

import requests, socket, atexit, ssl, wincertstore
from requests.auth import HTTPBasicAuth
certfile = wincertstore.CertFile()
certfile.addstore("CA")
certfile.addstore("ROOT")
atexit.register(certfile.close)
ssl_sock = ssl.wrap_socket(s,ca_certs=certfile.name, 
cert_reqs=ssl.CERT_REQUIRED)
requests.get(url)

我收到以下错误...................
requests.exceptions.SSLError: HTTPSConnectionPool(host='myhost', port=443): Max retries exceeded with url: myurl (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),))

我可以在同一网址上使用wget并下载内容。

wget --no check certificate --user=my username --password=my password URL

但是我对下载内容不感兴趣,因为我只需要抓取一小部分网页内容。

Pythin版本= 3.6.5

Wincertstore链接-Link

在此先感谢您的帮助..............

参考方案

所有这些都在requests文档的SSL Cert Verification部分中进行了说明。

默认情况下,requests使用来自certifi的证书(如果存在),回退到urllib3认为是您的OS证书存储的存储库,而该存储库本身又依赖于Python认为的存储库(尽管在旧版本中,通常不)。

您的公司显然拥有一个私有证书,甚至可能是自己签署的证书,该证书不会包含在certifi中。它可能在Windows证书存储中-在这种情况下,urllib3应该会自动将其拾取-但我怀疑不是。证书可能直接安装在IT部门强迫您使用的某些自定义浏览器设置中,而不是安装在OS商店中。也许根本没有安装。 (您没有提到能够在浏览器中访问该网站而没有看到破锁的图标…)

您要将--no check certificate(或更可能是--no-check-certificate?)传递给wget,所以您只是不验证SSL。如果您想在requests中做同样的事情,那就是:

requests.get(url, verify=False)

如果您可以确定确实安装了证书,即使wget找不到它……那么,您的代码将无法按编写的方式工作。这是可行的:

忽略证书,仅禁用验证,如上所示。
找出相关证书的实际安装位​​置以及如何加载,以及:

在每个verify调用中将其作为requests参数传递。
将其静态设置在某个地方,然后将其传递到环境变量中。
将其安装到默认证书存储中,以便一切自动进行。
编写一个HTTPAdapter并将其安装到您的requests会话中。

首先,您的代码只是试图以与Python已经完全相同的方式获取默认证书。该wincertstore模块只是Python 3.4+中已经内置的模块的反向移植。

其次,您的代码所要做的就是获取一个证书,使用它创建一个SSL套接字,忽略该套接字,并告诉requests进行其常规操作。那将无济于事。如果要将证书传递给requests,请执行以下操作:

requests.get(url, verify='/path/to/cert')

…或将其放在环境变量REQUESTS_CA_BUNDLE

…或执行我在聊天中向您显示的HTTPAdapter代码(您在其中找到了未指定的旧的无法正常工作的版本)。如果您确实想这样做,请参见文档中的HTTPAdapter

Python GPU资源利用 - python

我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

Python:图像处理可产生皱纹纸效果 - python

也许很难描述我的问题。我正在寻找Python中的算法,以在带有某些文本的白色图像上创建皱纹纸效果。我的第一个尝试是在带有文字的图像上添加一些真实的皱纹纸图像(具有透明度)。看起来不错,但副作用是文本没有真正起皱。所以我正在寻找更好的解决方案,有什么想法吗?谢谢 参考方案 除了使用透明性之外,假设您有两张相同尺寸的图像,一张在皱纹纸上明亮,一张在白色背景上有深…

Requests.get无法与&字符一起使用 - python

我正在使用以下网址进行request.get调用:https://api.datasource.com/apps/ios/ranking?countries=NL&categories=Overall > Kids > 5 & Under&device=ios&ranks=1000 我收到"categor…

Python uuid4,如何限制唯一字符的长度 - python

在Python中,我正在使用uuid4()方法创建唯一的字符集。但是我找不到将其限制为10或8个字符的方法。有什么办法吗?uuid4()ffc69c1b-9d87-4c19-8dac-c09ca857e3fc谢谢。 参考方案 尝试:x = uuid4() str(x)[:8] 输出:"ffc69c1b" Is there a way to…

Python:无法识别Pip命令 - python

这是我拍摄的屏幕截图。当我尝试在命令提示符下使用pip时,出现以下错误消息:pip无法识别为内部或外部命令,可操作程序或批处理文件。我已经检查了这个线程:How do I install pip on Windows?我所能找到的就是我必须将"C:\PythonX\Scripts"添加到我的类路径中,其中X代表python版本。如您在我的…