Как сделать HTTP-запрос через прокси-сервер (tor) socks с использованием Python?

Я пытаюсь сделать HTTP-запрос с помощью Python. Я попытался изменить свой системный прокси Windows (используя inetcpl.cpl)

url = 'http://www.whatismyip.com'
request = urllib2.Request(url)
request.add_header('Cache-Control','max-age=0')
request.set_proxy('127.0.0.1:9050', 'socks')
response = urllib2.urlopen(request)
response.read()

выдает мне ошибку

Отслеживание (последний вызов последним): файл "", строка 1, в ответе = urllib2.urlopen (запрос) Файл "C: \ Python27 \ lib \ urllib2.py", строка 126, в urlopen return _opener.open (url, данные, тайм-аут) Файл «C: \ Python27 \ lib \ urllib2.py», строка 400, в открытом ответе = self._open (req, data) Файл «C: \ Python27 \ lib \ urllib2.py», строка 423, в _open 'unknown_open', req) Файл «C: \ Python27 \ lib \ urllib2.py», строка 378, в _call_chain result = func (* args) Файл «C: \ Python27 \ lib \ urllib2.py», строка 1240 , в unknown_open поднять URLError ('unknown url type:% s'% type) URLError:


person claws    schedule 10.06.2012    source источник
comment
Возможный дубликат: stackoverflow.com/questions/2317849/   -  person claws    schedule 10.06.2012


Ответы (2)


Я ОП. Согласно ответу Тишо, это сработало для меня:

import urllib, urllib2

##Download SocksiPy - A Python SOCKS client module. ( http://code.google.com/p/socksipy-branch/downloads/list )
##Simply copy the file "socks.py" to your Python's lib/site-packages directory, and initiate a socks socket like this.
## NOTE: you must use socks before urllib2.
import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket

url = 'http://ifconfig.me/ip'
request = urllib2.Request(url)
request.add_header('Cache-Control','max-age=0')
response = urllib2.urlopen(request)
print response.read()
person claws    schedule 10.06.2012
comment
Для меня это работало только с портом 9150. Возможно, новое обновление в Tor? - person Mastergalen; 03.11.2013
comment
В чем преимущество Cache-Control, max-age = 0? И ни 9050, ни 9150 не работает. - person NumenorForLife; 16.07.2015

Похоже, что URLLIB2 не поддерживает SOCKS в качестве типа прокси (как описано здесь: Как использовать прокси SOCKS 4/5 с urllib2?). Посмотрите на http://code.google.com/p/socksipy-branch/ для примера urllib + socks.

person Tisho    schedule 10.06.2012