用TOR运行python脚本

时间:2012-03-26 10:05:24

标签: python linux proxy tor

大家好!起初我想确保有类似的主题,但没有接受的答案或明确的答复。所以我想把它们结合起来再问一遍。我有以下脚本:

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

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

 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.

任何人都可以解释如何匿名执行我的脚本吗?

2 个答案:

答案 0 :(得分:4)

有可能使用给定的答案:

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地址???

答案 1 :(得分:3)

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

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