2010-05-06 1 views
0

La pièce suivante de code fonctionne comme prévu lors de l'exécution dans une installation locale de django apache 2,2Différence entre l'appel URLLIB2 dans IDLE et depuis Django?

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); 

Cependant, lorsque j'entre ce code dans IDLE sur la même machine que je reçois l'erreur suivante:

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 

Des idées?

+0

J'ai la condition inverse. Je n'obtiens aucune erreur dans les erreurs IDLE.But dans Django. – Jibin

Répondre

1

urllib et urllib2 Je pense qu'il faut regarder les variables d'environnement pour les proxies si on ne les définit pas par programme. Peut-être que les variables d'environnement proxy n'ont pas été définies correctement dans IDLE?

Comparer la sortie du suivant de IDLE au programme Django:

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

EDIT:http://docs.python.org/library/urllib2.html#urllib2.ProxyHandler Citation:

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.

Peut-être que Django crée un ProxyHandler? Essayez d'appeler urllib2.ProxyHandler() dans IDLE.

+0

Donne un tourbillon et les deux reviennent vides. – danspants

+0

Bingo! Merci pour ça! – danspants

+0

Fait intéressant, cela a fonctionné une fois et je ne peux pas le reproduire. – danspants

0

Peut-être que la version de Django a déjà préparé urllib2 avec les informations d'identification nécessaires pour le proxy, tandis que la version IDLE n'a pas?

Questions connexes