urllib чтение URL-адреса дает тестовую страницу сервера, когда браузер не

В настоящее время я прохожу отличный Python Challenge (http://www.pythonchallenge.com/). . Текущая проблема, которую я решаю, связана с использованием библиотеки urllib, но у меня возникли проблемы. Я пытаюсь использовать эту библиотеку для подключения к сайту через брандмауэр моей компании. Начнем с кода:

proxy = {'http':'http://my.companys.proxy/proxy.pac'}
urllib.urlopen('http://www.pythonchallenge.com', proxies=proxy).read()

Это дает ответ http, но, как ни странно, это тестовая страница HTTP-сервера Apache:

...Red Hat Enterprise Linux Тестовая страница... Эта страница используется для проверки правильной работы HTTP-сервера Apache после его установки и т. д....

Итак, я, похоже, успешно установил http-соединение за пределами нашего брандмауэра, но получаю другой HTTP-ответ, чем мой браузер. Еще одна подсказка (или нет), когда я пытаюсь подключиться к странице about.php:

urllib.urlopen('http://www.pythonchallenge.com/about.php', proxies=proxy).read()

Это, однако, дает:

404 Не найдено... Apache 2.2.3 Red Hat Server на www.pythonchallenge.com Порт 80

Оба приведенных выше адреса прекрасно работают в моем браузере (используя один и тот же прокси). Есть идеи, где я ошибаюсь?


person Chris Knight    schedule 28.03.2013    source источник


Ответы (1)


urllib не поддерживает синтаксический анализ файла .pac. Страница, которую вы видите, вероятно, является страницей Apache для сервера, обслуживающего этот файл конфигурации .pac.

.pac содержат код javascript, который предоставляет вашему браузеру правила прокси. Вы можете попробовать открыть файл напрямую и посмотреть, какой прокси будет настроен для сайта Python Challenge. Подробнее см. http://en.wikipedia.org/wiki/Proxy_auto-config. на формат файла.

Как только вы выясните, какой прокси-сервер будет использоваться, вместо этого настройте это как сервер в сопоставлении proxies.

person Martijn Pieters    schedule 28.03.2013
comment
Спасибо. Имеет смысл. Похоже, что для использования прокси-сервера, указанного в .pac, требуется аутентификация, и одна библиотека кода, которая может помочь (ntlmaps), заблокирована от загрузки IP-фильтром моей компании. Пах. Это действительно превращается в вызов! - person Chris Knight; 28.03.2013
comment
Если ваш прокси-сервер принимает аутентификацию HTTP BasicAuth, вы можете добавить имя пользователя и пароль в карту прокси, см. Как указать аутентифицированный прокси-сервер для HTTP-соединения Python. ? - person Martijn Pieters; 28.03.2013
comment
Мои соболезнования; корпоративная политика, которая блокирует SourceForge, о боже. - person Martijn Pieters; 28.03.2013