2010-03-27 6 views
3

Je suis en train de connexion automatiquement dans un site Web en utilisant Perl avec WWW :: Mechanize.connexion WWW :: Mechanize Perl fonctionne seulement après relancement

Ce que je fais est:

$bot = WWW::Mechanize->new(); 
$bot->cookie_jar(
     HTTP::Cookies->new(
      file   => "cookies.txt", 
      autosave  => 1, 
      ignore_discard => 1, 
     ) 
); 

$response = $bot->get('http://blah.foo/login'); 

$bot->form_number(1); 

$bot->field(usern => 'user'); 
$bot->field(pass => 'pass'); 
$response =$bot->click(); 

print $response->content(); 

$response = $bot->get('http://blah.foo'); 

print $response->content(); 

Les travaux de connexion, mais quand je charge la page, il me dit que je ne suis pas connecté.

Vous voyez que je stocke les cookies dans un fichier. Maintenant, si je relance le script sans la partie de connexion, il est dit que je suis connecté ...

Est-ce que quelqu'un comprend ce comportement étrange?

Modifier: En fait, je remarque que le problème se produit aussi avec certains navigateurs web sur certaines plate-forme. La page indique "Non connecté". Cependant, il suffit de recharger la page pour être connecté.

Dans le script, j'ai essayé de faire un double get, mais ça ne marche pas mieux. Le seul moyen est de le lancer deux fois.

Il a travaillé avec curl lorsque j'ai fait la dernière demande deux fois.

+0

Oh, il est donc VOTRE bot qui affiche toutes ces questions sur SO! :) – DVK

+0

Ce problème existe-t-il avec N'IMPORTE QUEL site web ou juste une page de connexion spécifique? Pourriez-vous s'il vous plaît fournir un exemple d'une page disponible publiquement sur Internet où ce comportement est exposé afin que nous puissions essayer de reproduire? – DVK

+0

Voir mon ajout ci-dessous. Malheureusement, aucune page publique n'est disponible, désolé. – Klaus

Répondre

2

Certains sites que j'ai vus ne définissent pas ou ne traitent pas correctement leurs cookies de session sur chaque page, ils échouent si vous accédez à leurs pages dans un ordre "inattendu". Par exemple, la page de connexion ou la page de gestionnaire de connexion ou une page de contenu contextuel peut s'attendre à voir le cookie de session déjà défini par une page normale du site.

Cela ressemble à votre problème, car il fonctionne la deuxième fois lorsque le cookie est déjà défini lorsque vous récupérez la page.

Je travaille autour de ce genre de problèmes en simulant une activité plus typique de la session utilisateur du navigateur dans mon script en allant chercher quelques pages « normales » avant d'aller à la partie de connexion réelle:

$www->get('http://www.example.com');   # Homepage 
$www->get('http://www.example.com/account'); # Authenticated section front page 
# Now everything is set up, proceed with account login... 
+0

Merci beaucoup! J'ai d'abord ouvert une page protégée, et il m'a redirigé vers la page de connexion. Au lieu de cela, j'ouvre maintenant la page d'accueil, puis la page protégée et cela fonctionne parfaitement! – Klaus

Questions connexes