Что вызывает urllib2.urlopen () для подключения через прокси? - PullRequest
0 голосов
/ 18 ноября 2010

Я пытаюсь прочитать URL в нашей корпоративной сети. В частности, сервер, с которым я связываюсь, находится в одном офисе, а клиентский ПК - в другом:

print(urlopen(r"http://london.mycompany/mydir/").read())

Всякий раз, когда я запускаю эту функцию, я получаю:

Traceback (most recent call last):
  File "<stdin>", line 1, in ?
File "C:\Python24\lib\urllib2.py", line 130, in urlopen
  return _opener.open(url, data)
File "C:\Python24\lib\urllib2.py", line 364, in open
  response = meth(req, response)
File "C:\Python24\lib\urllib2.py", line 471, in http_response
  response = self.parent.error(
File "C:\Python24\lib\urllib2.py", line 402, in error
 return self._call_chain(*args)
File "C:\Python24\lib\urllib2.py", line 337, in _call_chain
 result = func(*args)
File "C:\Python24\lib\urllib2.py", line 480, in http_error_default
 raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 407: Proxy Authentication Required

Странно, что между этими двумя компьютерами нет брандмауэра - по какой-то причине url решил подключиться к веб-серверу через прокси-сервер, который мы обычно используем для подключения к контенту за пределами компании, и в этом случае это терпит неудачу, потому что я не аутентифицировал это.

Я почти уверен, что ошибка происходит на клиентском ПК: я выполнил nslookup и пинг на сервер, чтобы убедиться, что между двумя компьютерами есть соединение, однако, когда я наблюдаю транзакцию с использованием TCPView для Windows, я могу видите, что процесс python.exe подключается к совершенно другому серверу (да, прокси!).

Так что может быть причиной этого? Обратите внимание, что переменная os.environ ["http_proxy"] НЕ установлена ​​- эта переменная часто используется для подключения urllib через прокси-сервер. Это не тот случай, здесь. Может ли быть что-то еще, что может иметь такой же эффект?

FYI, запуск Python 2.4.4 на Windows XP 32bit в очень закрытой корпоративной среде.

1 Ответ

2 голосов
/ 18 ноября 2010

Читается из системных настроек. Используйте urllib.FancyURLOpener:

opener = urllib.FancyURLopener({})
f = opener.open("http://london.mycompany/mydir/")
f.read()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...