Simuler l'accès à une page web (après identification), possible ? - PHP - Programmation
Marsh Posté le 03-03-2009 à 21:18:47
Oui mais c'est de l'identification classique genre de site ou tu vois rien sans être connecté : http://www.facebook.com/home.php
Marsh Posté le 04-03-2009 à 09:35:16
regardes du côté de la lib de tests unitaires et d'intégration SimpleTest. c'est capable de simuler un navigateur web et saisir des infos dans un formulaire.
Marsh Posté le 04-03-2009 à 09:43:44
<?php
$post_data = "userid=";
$post_data .= $_POST['userid'];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://ww7.aitsafe.com/cf/addmulti.cfm" );
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$page = curl_exec($curl);
curl_close($curl);
print($page);
?>
Marsh Posté le 04-03-2009 à 17:52:59
Merci Fluminis, je teste ca des que possible. Par contre, comment je fais si je ne connais pas la variable (userid dans ton exemple) et que le createur du site a mis autre chose genre "myuserid" ?
Je vais aussi me renseigner sur Simpletest
Dans l'attente de vos reponses et en vous remerciant deja.
Marsh Posté le 04-03-2009 à 18:01:42
ben tu regardes le code source du formulaire d'authentification et tu repères le nom du champ qui contient le login et celui qui contient le mdp.
Marsh Posté le 04-03-2009 à 18:05:23
plus tu regardes s'il y a des champs hidden qui pourraient etre la cachés quelque part et qui serviraient a quelque chose pour le site en question dans le processus de chargement (il se peut fortement qu'il n'y en ait pas)
Marsh Posté le 04-03-2009 à 20:58:41
Et ça marche avec tous les sites cette technique ?
Ah et quand on a deux variables... c'est bien :
$post_data = "email=moimoi";
$post_data .= &pass=test;
??
Marsh Posté le 04-03-2009 à 21:31:55
J'ai essayé avec SimpleTest !
J'explique clairement ce que je cherche à faire (pas très utile en soi mais bon, on fait ça pour le challenge^^) : Le but est d'actualiser (donc de simplement se connecter à la page d'une application Facebook) puis à la limite de cliquer sur un ou deux liens mais ça on s'en fiche. Mais avant, il faut bien sûr s'identifier... J'ai testé ceci mais comme il y a authentification, je ne crois pas que ça passe. Est-ce parce que l'hébergeur chez qui j'utilise SimpleTest ne veut pas stocker de cookies ? (OVH, 60gp) Simpletest ne peut-il pas simuler l'aquisition de cookies? Ou le problème viendrait-il d'ailleurs ??
Code :
|
Dans tous les cas, ça bloque au niveau de l'auth car j'ai essayé de naviguer sur un site banal sans mot de passe et la visite avec l'IP du serveur d'OVH est bien prise en compte.
Et puis, je ne trouve rien dans la doc de Simpletest qui pourrait renvoyer la page pour l'afficher. Et éventuellement pour comprendre pourquoi ça ne connectes pas.
Merci pour votre aide.
Marsh Posté le 05-03-2009 à 00:22:09
salut,
l'utilisation de CURL te permet justement de générer un cookie
mais pour ce que tu veux en faire, je pense qu'il pourrait etre plus sage de regarder du coté de l'API facebook?
Marsh Posté le 05-03-2009 à 07:09:09
quand j'essaye avec Curl, "Ovh" me renvoie une page blanche...
Marsh Posté le 05-03-2009 à 10:08:27
gregm54 a écrit : Et ça marche avec tous les sites cette technique ? |
ça ne fonctionne pas sur les sites qui utilisent des jetons (un champ hidden renseigné dans la page de login qui doit être renvoyé dans les données POST)
Dans ce cas, la technique est d'accéder à la page de login, récupérer le jeton, puis poster la demande de connexion avec userid, passwd et jeton
ça ne fonctionne pas non plus avec les sites qui utilisent les informations 'intelligentes' comme l'image brouillée ou la question mathématique (ex: combien font 1 + 7 ?), dans ce cas, pas de solution simple ... mais il faut savoir que cette dernière technique n'est en général pas utilisées pour se loger à un site, c'est plus utilisé lors de la création d'un compte sur un site donc le risque est limité d'entrer dans ce dernier cas de figure
Marsh Posté le 05-03-2009 à 10:28:57
Voici un script pour tester mon formulaire d'authentification. Il a 2 champs pour saisir le login et le mdp, mais ensuite, j'ai du javascript qui prend les 2 infos et les met en md5 dans 2 champs cachés d'un autre formulaire invisible et c'est ce formulaire qui est envoyé au serveur. Ca devrait donc couvrir ton besoin.
Code :
|
Ensuite voici un 2ième script qui teste la manipulation d'un page web affichant des configurations de machines (tableau triable paginé). La fonction setUp() effectue l'authentification avant de lancer les tests.
Code :
|
Marsh Posté le 05-03-2009 à 23:20:28
salut,
- heu, tu t'es amusé à lire le code HTML retourné suivant certains critères... le jour un le site spécifié change de présentation, ton paté est obsolète....bref, pas durable dans le temps et donne pas envie d'etre maintenu
- Tips pour ce que tu sembles vouloir faire : regarde du coté de l'extension Firefox Selenium IDE, j'ai comme l'impression que tu réinvente la roue
- Pour ton message "c'est tout blanc chez ovh", faut peut etre veiller a afficher les erreurs php déjà... (toujours désactivé par défaut en environnement de production)
Marsh Posté le 06-03-2009 à 09:43:29
Pour info, les scripts donnés précédemment sont pour des tests d'intégration d'une appli web que je développe. Donc je maîtrise le code html produit.
Je connais Selenium. Par contre, je ne me souviens plus à l'époque pourquoi je l'avais écartée comme solution de TU/TI.
Marsh Posté le 03-03-2009 à 20:06:39
Bonjour,
Je recherche à faire quelque chose de simple (enfin, à l'écrit du moins) mais je ne sais pas si c'est possible.
Je m'explique : J'ai la possibilité chez mon hébergeur de programmer le lancement d'un script PHP (tous les lundis 8h par exemple).
J'aimerais que mon script simule l'arrivée d'un visiteur sur une page (avec l'IP du serveur du coup) mais il faut être identifié pour voire cette page ...
Y a il moyen de faire une sorte de redirection en incluant les mots de passe / nom d'utilisateur pour que le script charge simplement la page (après une identification).
Merci d'avance