【问题标题】:Can't send HTTPS request through proxy using urlib2无法使用 urllib2 通过代理发送 HTTPS 请求
【发布时间】:2015-04-15 03:40:07
【问题描述】:

我正在尝试创建一个 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。对我来说都没有意义。有什么建议吗?

【问题讨论】:

  • 请将服务器正在使用的证书发布到127.0.0.1:8080。此外,8443 通常用作备用 HTTPS 端口。

标签: python https openssl urllib2


【解决方案1】:

试试这个代码。我得到它与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()

burp 配置


演示

【讨论】:

  • 不。结果相同。不过感谢您的努力。
  • 奇怪的是它实际上是通过Burp发送并收到响应的,所以cert已经被处理了。为什么会有问题超出我的理解。
猜你喜欢
  • 1970-01-01
  • 2016-07-05
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
相关资源
最近更新 更多