9
votes

Pourquoi mon LWP ne fonctionne-t-il pas :: Les informations d'identification userAgent fonctionnent?

J'essaie d'accéder à un fichier protégé. Le serveur utilise l'authentification de Digest - que je peux voir de la réponse imprimée. Voici le code d'exemple:

use LWP;
use strict;

my $url = 'http://somesite.com/aa/bb/cc.html';
my $username = 'scott';
my $password = 'tiger';

my $browser = LWP::UserAgent->new('Mozilla');
$browser->credentials("http://somesite.com:80","realm-name",$username=>$password);
my $response=$browser->get($url);

print $response->content;


2 commentaires

Essayez de supprimer le numéro de port de "http://somesite.com:80" .


Ce n'est pas un port mais http: // doit être supprimé - merci Ivan


4 Réponses :


18
votes

Considérez l'extrait suivant à partir du LWP :: userAgent code> Documentation du module:

$ UA-> Critiques ($ NetLoc, $ royaume) code>
$ UA-> Critiques ($ NetLoc, $ royaume, $ uname, $ passe) code> p>

Obtenez / définir le nom d'utilisateur et le mot de passe à utiliser pour un royaume. P>

Le $ NetLoc code> est une chaîne du formulaire ": " code>. Le nom d'utilisateur et le mot de passe ne seront transmis que sur ce serveur. Exemple: p>

$browser->credentials("somesite.com:80","realm-name",$username=>$password);


1 commentaires

Merci .... gbacon ... Supprimer "http: //" dans les informations d'identification L'hôte a résolu le problème. Merci beaucoup. De toute façon nous disons le port n ° 80, nous n'avons donc pas besoin de dire http je suppose



3
votes

Lorsque vous avez ces sortes de problèmes, utilisez un sniffer http pour regarder la transaction afin que vous puissiez voir les en-têtes de votre programme envoient. Dans ce cas, vous n'envoyez probablement pas du tout les informations d'identification car l'état HTTP est 401 au lieu de 403. Cela signifie généralement que vous avez commis une erreur avec les informations d'identification, telles que Gbacon Notes dans sa réponse .


0 commentaires

13
votes

HTTP Obtenir la demande autorisée peut également être effectuée comme suit

use LWP::UserAgent;

my $address = "localhost";
my $port = "8080";
my $username = "admin";
my $pass = "password";

my $browser = LWP::UserAgent->new;
my $req =  HTTP::Request->new( GET => "http://$address:$port/path");
$req->authorization_basic( "$username", "$pass" );
my $page = $browser->request( $req );


1 commentaires

Cette méthode semble fonctionner même lorsque le serveur ne fournit pas de nom de domaine dans 401 réponses.



0
votes

J'ai résolu ceci en installant perl-ntlm.noarch sur Red Hat 7.


0 commentaires