python - 在 python 中测试 HTTPS 代理

标签 python python-2.7 https proxy urllib

我管理着很多 HTTPS 代理(即具有自己的 SSL 连接的代理)。我正在用 python 构建一个诊断工具,它尝试通过每个代理连接到一个页面,如果无法通过其中一个代理连接,我会给我发电子邮件。

我开始着手解决这个问题的方法是使用 urllib 通过每个代理进行连接并返回一个页面,该页面应该使用下面的代码显示“成功”。

def fetch(url):
    connection = urllib.urlopen(
    url,
    proxies={'http':"https://"+server+':443'}
    )
    return connection.read()


print fetch(testURL)

这完美地获取了我想要的页面问题是即使代理服务器信息不正确或代理服务器不活动,它仍然会获取我想要的页面。因此,它要么从不使用代理服务器,要么尝试使用它并在失败时不使用它进行连接。

我该如何纠正这个问题?

编辑:似乎没有人知道该怎么做。我将开始阅读其他语言库,看看它们是否可以更好地处理它。有谁知道使用其他语言(如 Go)是否更容易?

编辑:我刚刚在下面的评论中写了这个,但我认为这可能是一个误解。 “代理有它自己的 ssl 连接。所以如果我去 google.com,我首先与 foo.com 进行 key 交换,然后与目标地址 bar.com 或目标地址 baz.com 进行另一个 key 交换。目标不会必须是 https,代理是 https"

最佳答案

大多数人将https代理理解为理解CONNECT的代理要求。我的示例创建了直接 SSL 连接。

try:
    import http.client as httplib # for python 3.2+
except ImportError:
    import httplib # for python 2.7


con = httplib.HTTPSConnection('proxy', 443) # create proxy connection
# download http://example.com/ through proxy
con.putrequest('GET', 'http://example.com/', skip_host=True)
con.putheader('Host', 'example.com')
con.endheaders()
res = con.getresponse()
print(res.read())

如果你的代理是反向代理那么就改

con.putrequest('GET', 'http://example.com/', skip_host=True)

con.putrequest('GET', '/', skip_host=True)`

关于python - 在 python 中测试 HTTPS 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25656574/

相关文章:

python - 拆分混合数据框的列

python - 寻找一个字典值,如果不存在 - 运行另一个模块

python - 用户输入一个函数

python - 如何从代码而非数据库的角度主动避免重复行?

python - 如果谷歌云断开连接如何恢复anaconda环境

python - 如何在 Django Rest Framework 中使用多对多字段进行序列化

python - 尝试找出使用 Django 框架时出现的错误

sockets - 使用 sslStream 类包装在 ssl 流中

spring-mvc - 使用 GPC : Cloud SQL, Kubernetes(服务和入口)和带有 Google 托管证书的 HTTP(S) 负载均衡器部署 Spring MVC 应用程序

https - https 有什么用?