сделал тестовый скрипт на питон 3.2, который через ipv6-прокси скачивает страницу но даже там где к прокси точно есть доступ, он валится с ошибкой 403 forbidden есть ли какие-нибудь тонкости в бейсик-авторизации ipv6? или вообще в подключении к ним? скрипт: PHP: import urllib, urllib.request request = urllib.request.Request('http://internet.yandex.ru') hnds = [] proxy_map = {'http': '2a01:230:2::1ae:3128'} hnd = urllib.request.ProxyHandler(proxy_map) hnds.append(hnd) auth_handler = urllib.request.HTTPBasicAuthHandler() auth_handler.add_password('realm', 'host', 'bsbdpul', '123123') hnds.append(auth_handler) opener = urllib.request.build_opener(*hnds) urllib.request.install_opener(opener) response = urllib.request.urlopen(request, timeout=20) page = response.read() page = page.decode('utf-8', 'ignore') print('downloaded {0} bytes'.format(len(page)))
Дикс покажите дамп запросов при работе с прокси. Ну или попробуйте заменить урл прокси на правильный согласно RFC. IP адрес должен быть заключен в квадратные кавычки, после которых через двоеточие может идти номер порта. Как-то так: Code: proxy_map = {'http': 'http://[2a01:230:2::1ae]:3128/'}
да, облажался =\ сейчас у меня постоянно Traceback (most recent call last): File "/usr/lib/python3.2/urllib/request.py", line 1135, in do_open h.request(req.get_method(), req.selector, req.data, headers) File "/usr/lib/python3.2/http/client.py", line 967, in request self._send_request(method, url, body, headers) File "/usr/lib/python3.2/http/client.py", line 1005, in _send_request self.endheaders(body) File "/usr/lib/python3.2/http/client.py", line 963, in endheaders self._send_output(message_body) File "/usr/lib/python3.2/http/client.py", line 808, in _send_output self.send(msg) File "/usr/lib/python3.2/http/client.py", line 746, in send self.connect() File "/usr/lib/python3.2/http/client.py", line 1100, in connect self.timeout, self.source_address) File "/usr/lib/python3.2/socket.py", line 404, in create_connection raise err File "/usr/lib/python3.2/socket.py", line 395, in create_connection sock.connect(sa) socket.error: [Errno 101] Network is unreachable During handling of the above exception, another exception occurred: Traceback (most recent call last): File "ipv6.py", line 30, in <module> response = urllib.request.urlopen(request, timeout=20) File "/usr/lib/python3.2/urllib/request.py", line 138, in urlopen return opener.open(url, data, timeout) File "/usr/lib/python3.2/urllib/request.py", line 369, in open response = self._open(req, data) File "/usr/lib/python3.2/urllib/request.py", line 387, in _open '_open', req) File "/usr/lib/python3.2/urllib/request.py", line 347, in _call_chain result = func(*args) File "/usr/lib/python3.2/urllib/request.py", line 1171, in https_open context=self._context, check_hostname=self._check_hostname) File "/usr/lib/python3.2/urllib/request.py", line 1138, in do_open raise URLError(err) urllib.error.URLError: <urlopen error [Errno 101] Network is unreachable> может ли это быть потому что у меня нет внешнего ipv6? сайт с тестами говорит что у меня есть ipv4, но нет v6
Дикс Если любое железо между вами и сервером, к которому подключаетесь не умеет ipv6 - вы туда не подключитесь. Это очевидно. Однако - вы можете подключаться к прокси, умеющей в ipv6, и это уже она будет общаться с тем же яндексом по нужному адресу. Однако - вам будет сложно получить любой IPv6 адрес. Питон из коробки не умеет делать цепочки проксей (плюс HTTP-прокси вроде как не могут образовывать цепочки в принципе)
заработало что потребовалось: - хостинг на firstvds.ru, там в при создании вирт. сервера добавляем ему ipv6-адреса - конфигурировать питон с --enable-ipv6 - указать ип прокси согласно стандарта рабочий код - http://pastebin.com/gCZcJnhV