PhantomJS n'envoie pas d'en-tête d'authentification
J'essaie d'ouvrir une page web qui nécessite une authentification HTTP, dans PhantomJS.
Mon script est basé sur le loadspeed.js exemple:
var page = require('webpage').create(),
t, address;
page.settings.userName = "user";
page.settings.password = "password";
if (phantom.args.length === 0) {
console.log('Usage: loadspeed.js <some URL>');
phantom.exit();
} else {
t = Date.now();
address = phantom.args[0];
page.open(address, function (status) {
if (status !== 'success') {
console.log('FAIL to load the address');
} else {
t = Date.now() - t;
console.log('Loading time ' + t + ' msec');
page.render('page.jpg');
}
phantom.exit();
});
}
Je peux le voir sur le rendu page.jpg que je suis un 401 à chaque fois.
J'ai également la trace de la session HTTP à l'aide de Wireshark, qui révèle qu'aucun en-tête d'authentification est envoyé dans la requête GET à l'URL donnée.
Ce que je fais mal ici? Je suis juste de commencer avec PhantomJS, mais j'ai cherché toute la soirée, et pas obtenu loin...
- Quel navigateur? Chrome 19 seulement ne vous permet pas de faire une XHR paramètre le nom d'utilisateur et mot de passe. Ceci a été causé quand ils ont interdit le nom d'utilisateur:mot de passe@ proportion d'Url. HTTP Auth à l'encontre d'un autre site web est une affaire délicate. Je crois que je vais écrire un blog sur ce sujet de la prochaine fin de semaine.
- Ne pas le faire directement avec cette question, mais je tiens à souligner que, comme de PhantomJS 1.9.2 et SlimerJS 0.8.4, vos informations d'authentification (que ce soit fait avec
page.settings
oupage.customHeaders
) est envoyé à tous les serveurs 3ème partie référencées sur cette page. (E. g. si la page vous connecter utilise un CDN pour leur jQuery alors que le serveur CA devient votre nom d'utilisateur et mot de passe; de même pour les serveurs ad.) SlimerJS, au moins, est de travailler sur une solution.
Vous devez vous connecter pour publier un commentaire.
PhantomJS (à moins de 1.9.0) a un bug avec auth: il envoie la demande sans auth-têtes, et seulement après, il obtient le 401 arrière-t-il le demande à nouveau, mais cette fois avec les en-têtes. (C'est pour les OBTENIR; en POST, il ne fonctionne pas du tout.)
La solution est simple, donc au lieu de:
vous pouvez utiliser:
(J'ai juste traité de ce sujet dans un post de blog: http://darrendev.blogspot.jp/2013/04/phantomjs-post-auth-and-timeouts.html, et appris que la solution de contournement sur la PhantomJS liste de diffusion à partir d'Igor Semenko.)
page.settings.userName
etpassword
parfois le travail, n'est parfois pas. C'est probablement pas lié au manque 401 scène, car je travaille tout le temps avec le même serveur distant. Avec customHeader - semble toujours travailler.btoa
certainement n'a pas besoin de modules supplémentaires comme des 1.9.0.)Je ne pense pas qu'il n'y a rien de mal avec le script de votre aide ou de phantomjs (au moins dans v1.5).
Si vous essayez ce script:
phantomjs loadspeed.js http://browserspy.dk/password-ok.php
L'authentification est réussie.