2008-11-07 10 views
4

Lorsque vous utilisez urllib2 (et peut-être urllib) sur Windows, python semble magiquement prendre le paramètre proxy authentifié appliqué à InternetExplorer. Cependant, il ne semble pas vérifier et traiter la liste "Exceptions" du paramètre Advance.Comment puis-je appliquer des exceptions de proxy authentifiées à un programme d'ouverture en utilisant urllib2?

Y a-t-il un moyen de l'obtenir pour traiter la liste des exceptions? Ou, ignorez le paramètre de proxy IE et appliquez mon propre proxy d'ouverture pour résoudre ce problème?

J'ai joué avec la création d'un proxy auparavant, mais je n'ai pas réussi à le faire fonctionner. Voici ce que je réussi à creuser, mais je ne vois toujours pas comment/où appliquer des exceptions et je ne suis même pas sûr si cela est juste:

proxy_info = { 
         'host':'myproxy.com', 
         'user':Username, 
         'pass':Password, 
         'port':1080 
         }             

http_str = "http://%(user)s:%(pass)[email protected]%(host)s:%(port)d" % proxy_info 

authInfo = urllib2.HTTPBasicAuthHandler() 
authInfo.add_password() 
proxy_dict = {'http':http_str} 
proxyHandler = urllib2.ProxyHandler(proxy_dict) 

# apply the handler to an opener 
proxy_opener = urllib2.build_opener(proxyHandler, urllib2.HTTPHandler) 

urllib2.install_opener(proxy_opener) 

Répondre

2

Par défaut urllib2 obtient les paramètres de proxy de la variable d'environnement, c'est pourquoi il utilise les paramètres IE. C'est très pratique, car vous n'avez pas besoin de configurer l'authentification vous-même.

Vous ne pouvez pas appliquer d'exceptions comme vous le souhaitez, la manière la plus simple de le faire serait d'avoir deux opener s et de décider lequel utiliser selon que le domaine figure ou non dans votre liste d'exceptions.

Utilisez la valeur par défaut opener lorsque vous souhaitez utiliser le proxy, et un sans proxy pour quand vous n'avez pas besoin:

>>> no_proxy = urllib2.ProxyHandler({}) 
>>> opener = urllib2.build_opener(no_proxy) 
>>> urllib2.install_opener(opener) 

De here.

Edit:

Voilà comment je le ferais:

exclusion_list = ['http://www.google.com/', 'http://localhost/'] 

no_proxy = urllib2.ProxyHandler({}) 
no_proxy_opener = urllib2.build_opener(no_proxy) 

default_proxy_opener = urllib2.build_opener() 

url = 'http://www.example.com/' 

if url in exclusion_list: 
    opener = no_proxy_opener 
else: 
    opener = default_proxy_opener 

page = opener.open(url) 
print page 

Votre plus gros problème sera corresponde à l'URL à la liste d'exclusion, mais c'est une nouvelle question tout.

+0

Merci, j'ai essayé un simple essai/sauf quand l'erreur de proxy apparaît puis créez le noproxy et installez-le comme mentionné ci-dessus, et essayez à nouveau de vous connecter. Mais ça ne marche pas. On dirait que la partie connexion de mon script échoue. Est-ce que cela remplace les ouvreurs précédemment installés? Utiliser un gestionnaire de cookies aussi. – monkut

+0

J'ai mis à jour la réponse un peu, mais maintenant je ne sais pas si ProxyHandler gère automatiquement l'authentification. Si ce n'est pas le cas, vous devriez toujours pouvoir vous authentifier en construisant le gestionnaire comme vous le faites dans la question. –

+0

Si cela ne vous aide pas, vous pouvez ouvrir une nouvelle question avec plus d'exemples de code (y compris le gestionnaire de cookie, etc.), car celui-ci a été répondu (non, vous ne pouvez pas utiliser la liste d'exceptions d'Internet Explorer). –

Questions connexes