【问题标题】:Using Proxies to Handle HTTPS Connection Requests使用代理处理 HTTPS 连接请求
【发布时间】:2016-03-11 01:04:12
【问题描述】:

我正在尝试在仅接受 HTTPS 连接的网站上运行代码,但无法将其与代理结合。

我运行这样的代码来实例化代理:

os.environ['https_proxy'] = 'http://' + proxy

当我尝试使用之前实现的代理(我正在通过网站的 API)完成请求时,我总是收到此错误:

HTTPSConnectionPool(host=[ . . . ], port=443): Max retries exceeded with url: [. . .] (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7fab996ef790>: Failed to establish a new connection: [Errno -2] Name or service not known',)))

我的问题当然是如何缓解错误,但更主要的是,当强制使用 HTTPS 连接时,有什么方法可以解决它,这样您就不会完全停止使用或操纵该网站(有代理)?

【问题讨论】:

  • 我遇到了同样的问题并通过定义 SSL 上下文解决了它,它可以通过 urllib.request 和 urlopen 来完成。

标签: python https proxy


【解决方案1】:

代理服务器的主机名无法解析为 IP 地址。

要么是代理的主机名有问题,要么是 DNS 服务器有问题。如果您确定主机是正确的,请尝试使用其 IP 地址,例如

proxy = '192.168.1.1:1234'
os.environ['https_proxy'] = 'http://' + proxy

如果可行,则代理正常,但名称解析由于某种原因失败。尝试使用curl 看看是否可行,例如

https_proxy='https://localhost:1234' curl -v https://httpbin.org

【讨论】:

  • 好的,我完成了这些测试,除了使用localhost:1234curl 时,它们都可以正常工作;我已经在此处链接了运行后提供的信息:hastebin.com/gozotepozu.vhdl
  • 对不起,我没有说清楚,对于curl 命令,您应该将localhost:1234 替换为您的代理的主机名和端口。但听起来它在指定 IP 地址时在 Python 中有效,因此您需要弄清楚为什么您的主机名没有解析到该 IP 地址。
  • 不,是的,我第一次这样做,事实上这是我得到的:hastebin.com/bovoqajeru.xml 虽然后来我想了更多,但我开始怀疑你可能将它与计算机的个人连接。 . .反正我想多了哈哈。
  • 好的,我改变了一些东西,它返回了这个@mhawke:hastebin.com/ikinevenoj.vhdl Thoughts?
  • 与代理的连接被拒绝。仔细检查 IP 地址和端口。在 Python 中,我使用 IP 地址:端口 104.45.152.53:3128 进行了测试,它适用于 requests.get('https://httpbin.org')。这是一个有效的测试,因为您的 API 使用的是requests,而后者又使用了urllib3。除此之外,我无法提供进一步的建议。该代理服务器位于很多黑名单中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 2011-09-17
相关资源
最近更新 更多