Bonjour à tous,
je cherche à créer un Robot Web me permettant de me connecter à un site Internet gouvernemental en HTTPS à travers le Proxy (Webwasher) de l'entreprise où je suis.
Je rassure tout le monde : j'ai l'autorisation de faire ça de la part du site Internet en question et bien évidemment c'est dans le cadre de mon travail !
La connexion à ce fameux site en HTTPS via le Proxy ne pose plus de problèmeS, sic !
Par contre, l'authentification me donne du fil à retordre !
Voici comment cela fonctionne :
- remplissage de 2 champs "login" et "pass" ;
- clic sur le mot "Entrer" ;
- chargement de la page résultat.
Rien de bien extraordinaire me direz-vous ... sauf que ce formulaire ne possède pas de
<input type="submit" ... />
et que l'attribut "action" de la balise <form> n'est pas présent !!!
<form id="blablaLogin" name="blablaLogin" method="post" onsubmit="return false;">
Comment tout cela peut-il bien fonctionner ?
C'est assez simple : "login" et "pass" sont des <input /> classiques, mais "Entrer" est la valeur d'une simple balise <div> qui est surchargé par un CSS afin que la valeur de ce <div> soit cliquable !?
<div class="blabla_class" onmouseOver='HoverClass(this);' onmouseOut='HoverClass(this);' onclick="testlogin();" title="Cliquer pour entrer dans une session privée de blabla">Entrer</div>
La valeur "Entrer", qui devient donc cliquable, appelle une fonction Javascript via un attribut onclick="testlogin();" de la balise <div> à laquelle elle appartient.
La fonction "testlogin()" :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| function testlogin() {
var testok=true
if (document.getElementById("blablaLogin").login.value=="")
{alert("Vous devez donner un identifiant pour accéder à l'ensemble des ressources de blabla !! Merci");
testok=false;
}
else if (document.getElementById("blablaLogin").pass.value=="")
{alert("Vous devez donner un mot de passe pour accéder à l'ensemble des ressources de blabla !! Merci");
testok=false;
}
if (testok)
{envoyer();
}
else {
document.getElementById("blablaLogin").login.focus();
}
}
function envoyer() {
document.getElementById("blablaLogin").action = "/blablasession.asp";
document.getElementById("blablaLogin").target = "";
document.getElementById("blablaLogin").submit();
} |
Grâce à cet #@''¤*µ ingénieux système ... je ne peux pas utiliser la méthode suivante nécessaire à la validation de mon formulaire :
Je ne peux pas non plus passer directement en paramètres, via l'url, le "login" et "pass" à la page affectée à l'attribut "action" via le JS ... car on est en method="POST" :
https://blabla.gouv.fr/blablasession.asp?login=mon_login&pass=mon_pass
... moi j'y croyais !!!
Je pense que la solution serait que je commence par faire une connexion + authentification classique, mais au moment de la validation du formulaire : il faudrait que j'arrive à indiquer l'url de l'attribut "action" de la balise <form> associée à mon formulaire d'authentification ... suis-je claire ?
Mon code actuel :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #!c:/perl/bin -w
use strict; use warnings;
use WWW::Mechanize;
use Crypt::SSLeay;
use HTML::TreeBuilder;
my $m = WWW::Mechanize->new;
# PROXY SUPPORT
$ENV{HTTPS_PROXY} = 'http://proxy.mycompany.com:8080';
# PROXY_BASIC_AUTH
$ENV{HTTPS_PROXY_USERNAME} = 'mon_ident';
$ENV{HTTPS_PROXY_PASSWORD} = 'mon_mdp';
# récupération des informations
$m->agent_alias("Linux Mozilla");
$m->get('https://blabla.gouv.fr/default.asp');
exit unless $m->success;
# remplissage et validation
$m->set_fields(
login => 'mon_login', # entrez vos identifiants de connexion ici
pass => 'mon_pass',
);
$m->click;
die $m->res->status_line unless $m->success;
# affichage des informations
my $tree = HTML::TreeBuilder->new_from_content( $m->content );
print
map { $_->as_trimmed_text . "\n" }
$tree->look_down( _tag => 'span', id => qr/blabla_Ident/ ); |
Une idée ?
Gôm ... en plein doute !
Partager