首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取用于urlopen的urllib.requests证书包

获取用于urlopen的urllib.requests证书包
EN

Stack Overflow用户
提问于 2020-10-10 01:19:59
回答 2查看 613关注 0票数 2

我在windows上,当我调用同一站点时,我看到了urllib.requests.urlopen和requests package之间的区别。

当我执行以下操作时:

代码语言:javascript
复制
import urllib.request
f = urllib.request.urlopen('https://<domain certificated server> ')

我可以毫无问题地连接到我的服务器。

当我这样做的时候:

代码语言:javascript
复制
import requests
f = requests.get('https://<domain certificated server> ').text

我收到一个SSL证书错误。我知道这是由certifi引起的。所以我的问题是,我如何利用Python代码正在做的事情,并在请求中通过certifi使用它?

EN

回答 2

Stack Overflow用户

发布于 2020-10-21 20:52:57

您是否可以选择获取包含服务器证书的.pem文件?

urlopen正在使用windows上的ssl.enum_certificates加载证书。因此,证书是从windows服务获得的。

获得证书文件后,在您的call requests.get('<server.internal>', verify='/path/to/certfile')上使用它

票数 1
EN

Stack Overflow用户

发布于 2020-10-22 15:01:35

simple way告诉requests使用系统包,如果您知道它在哪里的话。在Linux上,它通常在/etc/ssl/certs/ca-certificates.crt中。

代码语言:javascript
复制
requests.get('<server.internal>', verify='/etc/ssl/certs/ca-certificates.crt')

如果您在Windows上,不知道系统包的位置,或者只想支持所有情况,您也可以定义自己的适配器。default adapter告诉urllib3DEFAULT_CA_BUNDLE_PATH加载证书,该证书来自调用certifi.where()。如果你不告诉urllib3到哪里去获取证书,它就会use the system default

代码语言:javascript
复制
import requests
import requests.adapters

class SysCertsHTTPAdapter(requests.adapters.HTTPAdapter):
  def cert_verify(self, conn, url, verify, cert):
    # require verification, but use system defaults
    # default requests implementation sets conn.ca_certs and/or conn.ca_cert_dir
    conn.cert_reqs = 'CERT_REQUIRED'


session = requests.Session()
session.mount('https://', SysCertsHTTPAdapter())
session.get("https://google.com")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64284595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档