2009-07-03 5 views
2

Je tente de tester les interactions avec un serveur Nexus nécessitant une authentification pour les opérations que j'utilise, mais je dois également gérer un serveur proxy interne.Gestion de l'authentification et des serveurs proxy avec httplib2

Basé sur ma compréhension (limitée) je peux ajouter plusieurs gestionnaires à l'ouvreur. Cependant, je reçois toujours une réponse 401. J'ai vérifié que le nom d'utilisateur et le mot de passe sont valides. Je ne suis pas certain si les cookies sont nécessaires pour le faire et si oui, comment ils seraient inclus. Des suggestions?

baseUrl = 'server:8070/nexus-webapp-1.3.3/service/local' 

params = {"[key]":"[value]"} 

data = urllib.urlencode(params) 

# create a password manager 
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() 

# Add the username and password as supplied 
password_mgr.add_password(None, baseUrl, username, password) 

handler = urllib2.HTTPBasicAuthHandler(password_mgr) 
proxy_support = urllib2.ProxyHandler({}) 

# create "opener" (OpenerDirector instance) 
opener = urllib2.build_opener(proxy_support, handler) 
urllib2.install_opener(opener) 

txheaders = {'User-agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'} 

req = Request(protocol+url, data, txheaders) 
handle = urlopen(req) 

C'est le champ de URLError résultant en-têtes:

>HTTPMessage: Server: Apache-Coyote/1.1 
Set-Cookie: JSESSIONID=B4BD05C9582F7B27495CBB675A339724; Path=/nexus-webapp-1.3.3 
WWW-Authenticate: NxBASIC realm="Sonatype Nexus Repository Manager API" 
Content-Type: text/html;charset=utf-8 
Content-Length: 954 
Date: Fri, 03 Jul 2009 17:38:42 GMT 
Connection: close 

Mise à jour Il semble Nexus mettre en œuvre une version personnalisée de Restlet's AuthenticationHelper. Merci à Alex, je savais quoi chercher.

Répondre

3

Pouvez-vous afficher les en-têtes complets de la réponse 401 que vous obtenez? Peut-être que ce n'est pas une demande d'authentification de base, c'est peut-être le proxy qui veut sa propre authentification - il est difficile de deviner sans voir les en-têtes!

Modifier: merci d'avoir montré les en-têtes (je les ai reformatés comme "code" sinon ils étaient illisibles). Comme je le soupçonnais, il ne veut pas de "Basic", il veut un autre protocole d'authentification "NxBASIC" (Nexus propriétaire ...?) - Je n'en ai jamais entendu parler (je ne sais rien à propos de Nexus) et j'imagine que ni le gestionnaire d'authentification de base que vous utilisez (même si NxBASIC a accepté l'authentification de base, le gestionnaire, sachant seulement qu'il s'agit d'un protocole différent, n'offrirait pas une telle authentification). Donc, vous devez d'abord rechercher exactement ce qu'est ce truc NxBASIC, et pour cela je pense qu'une question SO avec les bonnes balises pourrait aider. Puis, en fonction de ce que vous apprenez, vient la question intéressante de définir un gestionnaire pour cela ...! - (

+0

merci Alex, mis à jour la question –

+0

... et voir les en-têtes, il est facile de confirmer ma suspicion que vous N'obtenez pas une demande d'authentification de base, voir ma réponse éditée. –

Questions connexes