Разница между вызовом URLLIB2 в IDLE и от Django? - PullRequest
0 голосов
/ 06 мая 2010

Следующий фрагмент кода работает должным образом при запуске в локальной установке django apache 2.2

 fx = urllib2.Request(f);
 fx.add_header('User-Agent','Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.36 Safari/525.19');
 url_opened = urllib2.urlopen(fx);

Однако при вводе этого кода в IDLE на той же машине я получаю следующую ошибку:

    url_opened = urllib2.urlopen(fx);
  File "C:\Python25\lib\urllib2.py", line 124, in urlopen
    return _opener.open(url, data)
  File "C:\Python25\lib\urllib2.py", line 387, in open
    response = meth(req, response)
  File "C:\Python25\lib\urllib2.py", line 498, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python25\lib\urllib2.py", line 425, in error
    return self._call_chain(*args)
  File "C:\Python25\lib\urllib2.py", line 360, in _call_chain
    result = func(*args)
  File "C:\Python25\lib\urllib2.py", line 506, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 407: Proxy Authentication Required

Есть идеи?

Ответы [ 2 ]

1 голос
/ 06 мая 2010

urllib и urllib2 Я думаю, посмотрите на переменные окружения для прокси, если они не установлены программно Может быть, переменные окружения прокси не были правильно установлены в IDLE?

Сравните вывод следующего из IDLE с программой Django:

import os, pprint
for k in os.environ:
    if 'proxy' in k.lower(): # look for proxy environment variables
        print k, os.environ[k]

РЕДАКТИРОВАТЬ: Цитирование http://docs.python.org/library/urllib2.html#urllib2.ProxyHandler:

Cause requests to go through a proxy. If proxies is given, it must be a 
dictionary mapping protocol names to URLs of proxies. The default is to read the 
list of proxies from the environment variables. If no proxy environment 
variables are set, in a Windows environment, proxy settings are obtained from 
the Internet Settings section and in a Mac OS X environment, proxy 
information is retrieved from the OS X System Configuration Framework.

To disable autodetected proxy pass an empty dictionary.

Может, Джанго создает ProxyHandler? Попробуйте позвонить urllib2.ProxyHandler() в режиме бездействия.

0 голосов
/ 06 мая 2010

Возможно, версия Django уже подготовила urllib2 с необходимыми учетными данными для прокси, а версия IDLE - нет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...