【发布时间】:2012-12-24 05:05:11
【问题描述】:
我正在尝试通过 Tor 使用 HTTP 代理服务器发出一些 HTTP 请求。到目前为止,我已经尝试过 Privoxy、Tinyproxy 和 Polipo。但是每当我通过这些代理服务器中的任何一个发出请求时,它们都会以某种方式获取自己,并陷入循环。
为了检查 DNS 或网络是否有任何问题,我尝试在没有代理的情况下获取 URL,它工作正常。我正在使用 Ubuntu 12.04 64 位服务器,并使用带有 requests 模块的 python 来测试设置。
此外,我在具有两个静态 IPv4 地址的服务器上遇到此问题,在具有一个静态 IPv4 地址的服务器上,它工作正常。我尝试在 EC2 服务器上进行模拟,它也适用于具有弹性 IP 地址的服务器,但在没有弹性 IP 地址的服务器上,我遇到了同样的问题。
我试图通过编辑 Tinyproxy 的源代码来更深入地了解错误发生的原因,这是因为代理服务器认为请求的“主机”是 127.0.0.1。如果我在请求标头中指定“主机”,那么它工作得有点好。但这不是正常行为。
如果它可能只是一个代理服务器,那么我可以认为它是一个软件错误。但是所有代理服务器都存在问题,这让我怀疑网络设置是否有问题
这是我尝试提出请求的方式
import requests
# tinyproxy listens on Port 8888
r = requests.get("http://google.com", proxies={'http': '127.0.0.1:8888'})
我得到以下响应
400 Bad Request <p>You tried to connect to the machine the proxy is running on </p>
【问题讨论】:
-
你能标记你使用的程序语言吗?
-
我不确定 tiniproxy,但 Privoxy 和 Polipo 是 socks 代理,而不是 http/https。
-
Privoxy 和 Polipo 非常像 HTTP 代理服务器,但它们可以转发到 socks 代理,这就是它们过去与 TOR 捆绑在一起的原因。不过感谢上面的链接
-
问题解决了!原来这是我正在使用的最新版本的
requests库的问题。 (github.com/kennethreitz/requests/pull/1060)。感谢@eicto 的间接帮助
标签: python linux networking proxy tor