使用带代理的SSL证书时发生Python错误

2024-04-29 18:50:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在通过代理访问https页面:

    def read_page(self,url):
    '''
    Gets web page using proxy and returns beautifulsoup object
    '''
    soup = None
    try:
        r = requests.get(url, proxies=PROXIES, auth=PROXY_AUTH,
             cert = ('../static/crawlera-ca.crt'), verify=False,allow_redirects=False)
    except requests.exceptions.MissingSchema:
        return False

    if r.status_code == 200:
        soup = bs4.BeautifulSoup(r.text, "html.parser")
        if soup:
            return soup
    return False

我将“https://www.bestbuy.com”作为url传递。我得到这个错误:

^{pr2}$

当我删除cert = ('../static/crawlera-ca.crt')参数时,程序成功地访问了站点,并给出了一个“unsecurerequestwarning”,这是预期的。但我不明白为什么会发生另一个错误。证书文件在我的文件夹层次结构中的正确位置,并且是从代理服务下载的,所以我知道它是正确的。在

简单的选择是不使用证书并取消安全警告,但我想正确地执行它。有人能解释一下发生了什么事,我怎么解决它?在


Tags: httpsfalseurlcertreturnif错误page
1条回答
网友
1楼 · 发布于 2024-04-29 18:50:53

我想您误解了cert参数的含义。这不是您认为的可信CA的(列表),但此参数用于您用来针对服务器进行身份验证的客户端证书。而且,这样的认证证书还需要一个匹配的私钥。在

如果没有这个参数,服务器显然不需要您的客户机证书(这在任何情况下都是不常见的)。您可能想改为使用../static/crawlera-ca.crt作为证书验证的可信CA列表。在这种情况下,不应使用cert参数,而应使用verify参数,如下所示:

  r = requests.get(url, proxies=PROXIES, auth=PROXY_AUTH,
         verify = '../static/crawlera-ca.crt', 
         allow_redirects=False)

有关更多信息,请参阅documentation of cert parameter以及如何在客户端证书的身份验证中使用它,以及在服务器证书验证中使用how to use verify。在

相关问题 更多 >