无法使用 urlib2 通过代理发送 HTTPS 请求

Can't send HTTPS request through proxy using urlib2

我正在尝试创建一个 Python 脚本,该脚本通过代理(确切地说是 Burp)发送 HTTPS 请求,但它一直失败

ssl.CertificateError: hostname 'example.com:443' doesn't match u'example.com'

这是我的代码的简化版本:

proxy = urllib2.ProxyHandler({'https': '127.0.0.1:8080'})
opener = urllib2.build_opener(proxy)

opener.addheaders = [ ("Host", "example.com"),
                    ...
                    ]
urllib2.install_opener(opener)  
try:
    req = opener.open( 'https://example.com/service', 'data' ).read()
except urllib2.URLError, e:
    print e

所以看起来 Python 认为 Python(我认为 ssl.CertificateError 是一个 Python 错误,而不是 OpenSSL 错误)端口或地址之一是 Unicode。对我来说都没有意义。有什么建议吗?

试试这个代码。我得到它与 burp

一起工作

test.py

import urllib2

opener = urllib2.build_opener(
                urllib2.HTTPHandler(),
                urllib2.HTTPSHandler(),
                urllib2.ProxyHandler({'https': 'localhost:8080'}))
urllib2.install_opener(opener)
print opener.open( 'https://example.com', 'data' ).read()

打嗝配置


演示