使用 TOR 运行 python 脚本

Posted

技术标签:

【中文标题】使用 TOR 运行 python 脚本【英文标题】:Running python script with TOR 【发布时间】:2012-03-26 10:05:23 【问题描述】:

大家好!首先,我想确保有类似的主题,但没有公认的答案或明确的回应。所以我想把它们结合起来再问。我有以下脚本:

import urllib2

proxy = urllib2.ProxyHandler("http":"127.0.0.1:9050")
opener = urllib2.build_opener(proxy)
print(opener.open("http://www.ifconfig.me/ip").read())

我想匿名运行它,例如使用 tor。但它给出了这个错误:

Traceback (most recent call last):
  File "python_tor.py", line 5, in <module>
    print(opener.open("http://www.ifconfig.me/ip").read())
  File "/usr/lib/python2.7/urllib2.py", line 400, in open
    response = meth(req, response)
  File "/usr/lib/python2.7/urllib2.py", line 513, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.7/urllib2.py", line 438, in error
    return self._call_chain(*args)
  File "/usr/lib/python2.7/urllib2.py", line 372, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 521, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 501: Tor is not an HTTP Proxy

我在***中找到了以下答案:

 proxy_support = urllib2.ProxyHandler("http" : "127.0.0.1:8118")
    opener = urllib2.build_opener(proxy_support) 
    opener.addheaders = [('User-agent', 'Mozilla/5.0')]
    print opener.open('http://www.google.com').read()

还有对这个话题的评论:

It may be worthwhile for people reading this thread to know that port 8118 is actually Privoxy's port, not Tor. Tor is a strictly SOCKS-only proxy (port 9050) so it rejects all non-SOCKS traffic (e.g. HTTP). To handle non-SOCKS traffic, you would need to use Privoxy (port 8118) or Polipo (port 8123) to translate the traffic into SOCKS so Tor would accept.

Privoxy is better for privacy and Polipo is better for performance because it does caching.

谁能解释如何匿名执行我的脚本?

【问题讨论】:

Tor with Python? 的可能重复项 【参考方案1】:

使用给定的答案是可能的:

import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket
import urllib2

print(urllib2.urlopen("http://www.ifconfig.me/ip").read())

但我很惊讶是否可以在每个新请求中更改 Tor 的 IP 地址???

【讨论】:

你应该打开一个新问题。这需要tor控制协议。向 127.0.0.1:9051 发送“信号 NEWNYM”。 xt【参考方案2】:

您是否阅读过错误信息?它说“501 Tor 不是 HTTP 代理”。

它是 SOCKS 代理,而不是 HTTP 代理。尝试像这样使用它:How can I use a SOCKS 4/5 proxy with urllib2? 和 Python urllib over TOR?

【讨论】:

以上是关于使用 TOR 运行 python 脚本的主要内容,如果未能解决你的问题,请参考以下文章

使用Python通过Tor(SOCKS5)发送UDP请求

Python - Firefox 无头

为啥 Tor 无法访问本地主机页面

Urllib2 在 python 中使用 Tor

使用python连接到tor上的.onion网站?

在 python 中使用 urllib2 和 Tor 拒绝连接