使用python请求对代理连接进行SSL证书验证

使用python请求对代理连接进行SSL证书验证,ssl,proxy,python-requests,Ssl,Proxy,Python Requests,我正在尝试使用python请求库通过代理连接到一个站点,例如www.yahoo.com。因此,我将代理设置定义为: HOST = 'host' PORT = 1234 # random port I have used here USER = 'user' PASS = 'password' PROXY = "%s:%s@%s:%d" % (USER, PASS, HOST, PORT) PROXY_DICT = { "http" : 'http://' + PROXY, "

我正在尝试使用python请求库通过代理连接到一个站点,例如www.yahoo.com。因此,我将代理设置定义为:

HOST = 'host'
PORT = 1234 # random port I have used here
USER = 'user'
PASS = 'password'
PROXY = "%s:%s@%s:%d" % (USER, PASS, HOST, PORT)
PROXY_DICT = {
    "http"  : 'http://' + PROXY, 
    "https" : 'https://' + PROXY, 
    }
我使用以下代码行:

requests.get('http://www.yahoo.com', proxies=proxy_dict)
这不会引发异常,但响应文本是来自代理的一个错误页面,上面写着“确保已安装证书”。我有一个证书“certificate.crt”,与chrome浏览器一起使用时运行良好。并且证书是自签名的。我尝试了一些会引起错误的事情

将crt文件用作验证参数时,出现以下错误:

SSLError: [Errno bad ca_certs: 'certificate.crt'] []
Error: [('PEM routines', 'PEM_read_bio', 'no start line'), ('SSL routines', 'SSL_CTX_use_certificate_file', 'PEM lib')]
SSLError: [Errno bad handshake] [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')]
将crt文件用作证书参数时,出现以下错误:

SSLError: [Errno bad ca_certs: 'certificate.crt'] []
Error: [('PEM routines', 'PEM_read_bio', 'no start line'), ('SSL routines', 'SSL_CTX_use_certificate_file', 'PEM lib')]
SSLError: [Errno bad handshake] [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')]
我设法得到了一个.pem文件(我不确定,但可能是用一个键和一个crt文件生成的)。将其与cert param一起使用时,不会抛出错误,但响应文本再次包含文本“…确保已安装证书”…”

使用带有verify param的.pem文件时,出现以下错误:

SSLError: [Errno bad ca_certs: 'certificate.crt'] []
Error: [('PEM routines', 'PEM_read_bio', 'no start line'), ('SSL routines', 'SSL_CTX_use_certificate_file', 'PEM lib')]
SSLError: [Errno bad handshake] [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')]

现在,当我参考请求文档时,我看到我可以使用两个参数verify和cert。在这里我应该使用什么?您是如何解决这个问题的?