Как сделать HTTP-запрос через прокси-сервер (tor) с помощью 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()
дает мне ошибку
Traceback (последний последний вызов): Файл ", строка 1, в response = urllib2.urlopen(request) Файл" C:\Python27\lib\urllib2.py ", строка 126, в urlopen return _opener.open(url, data, timeout) Файл" C:\Python27\lib\urllib2.py ", строка 400, открыта response = 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 raise URLError ('неизвестный тип url:% s'% type) URLError:
Ответы
Ответ 1
Я OP. Согласно ответу Тишо, это сработало для меня:
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 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()
Ответ 2
Кажется, URLLIB2 не поддерживает SOCKS в качестве прокси-типа (как описано здесь: Как я могу использовать прокси SOCKS 4/5 с urllib2?). Посмотрите http://code.google.com/p/socksipy-branch/ для примера urllib + socks.