est-il possible de récupérer une variable utilisée dans un javascript d'une page HTML sur un serveur web, dans mon programme en perl sur le client ???
par exemple la variable "a" du javascript info.js ..
Je vous remercie d'avance
est-il possible de récupérer une variable utilisée dans un javascript d'une page HTML sur un serveur web, dans mon programme en perl sur le client ???
par exemple la variable "a" du javascript info.js ..
Je vous remercie d'avance
Le seul moyen est de passer par la case HTML en utilisant un champ "hidden" que tu récupères ensuite dans ton Perl.
Verre vide je te plains, verre plein, je te vide.
Le problême c'est que je ne peu pas du tout modifier la partie HTML. Je doime débrouiller avec le client pour récupérer cette variable. Merci quand même pour ton aide ....
Bah dans ce cas, tu es dans le ****.
Il faut bien voir que le Perl s'exécute sur ton serveur et ton javascript sur ton client...Pour moi, c'est donc impossible.
Verre vide je te plains, verre plein, je te vide.
En fait je m'explique, sur mon poste client je suis relié avec un cable rj45 jusqu'a un access point wifi. Sur cet accesspoint , il y a un serveur web contenant toutes les informations utiles (qualité du signal, @ip, @mac,etc...) . Cependant ces infos sont traitées avec le javascript. Sur le client, j'essaie donc de réaliser un programme en Perl me permettant d'obtenir ces paramétres. Car j arrive à les obtenir mais elles sont codées en base64 et lorsque je les décode elles sont inexploitables. J aurai donc aimé profiter du script java qui traite ces données beaucoup plus facilement à travers un petit prog en Perl.
Tu es sûr que tu n'as pas également une interface TelNet sur ton routeur ? C'est assez courant, et il y est beaucoup plus facile d'obtenir des informations intelligibles.
--
Jedaï
Et non malhereusement pas de telnet, ca commence a me m'*$*@! ca.
J ai bien récupérer les données codées en base64 pourtant impossible de les interpréter alors que le javascript du serveur le fait en 1 ligne. Mais bon je veux trouver !!!!!
Tu es sûr que tu décodes les mêmes données ?
--
Jedaï
Absolument certainement sur..
Je les récupére dans le meme fichier que le javascript le récupére
en fait tu veux réécrire en perl une fonction javascript, c'est ca ? alors envoie ta fonction javascript à ce moment-là, ca en inspirera peut-être certains
IL ya pas plus simple pour la fonction javascript. le script inclu un fichier contenant la "fameuse"(fumeuse) variable data :
.....
var i=0;
var a = convertFromBase64(data);
i += 40;
putLine ("Current communications quality (%)", Math.round ((a[i] * 100) / 92));
......
Il me semble que Jedaï t'a déjà fait la traduction en perl pour cette fonction dans un autre post.
Donc pour résumer, tu as tes données, la fonction pour les traduire, ou est le problème ?
Le problême est que les données traduites ne correspondent pas à celles traduites par le javascript, elles sont donc totalement inexploitables. c'est pourquoi j aurai voulu récupérer le résultét du javascript. Mais bon tant pis, je vais me débrouiller autrement. Merci quand même pour votre aide...
et pour accéder à la page t'affichant ces données tu tapes une url avec des paramètres par hasard ? parce qu'à la rigueur, tu peux toujours interroger le serveur web avec LWP
c'est bon j ai reussi a retrouver les sources du script utilisé sur le serveur. Je ne décodai pas la même chose car ils utilisent la fonction "convertfrombase64" qui à eté crée par leur soin. je n'ai plus qu'a l'adapter au Perl et ca va le faire. Mais je crois que j ai encore de longues heures de boulot devant moi...
et fi a vientot (je pense )
Sinon, au passage. Est-ce que il serait possible d'insérer un code javascript dans un code Perl ??? Je me pose cette question car ce serait bien plus simple pour moi !!!!
un code javascript ou java peu m'impooooortee !!
Merciii bien !!!
Le module Javascript fait ça. Le module Inline::Java également, tous deux sont disponible sous Windows.
(Tu ne veux pas plutôt nous mettre le code en Javascript que tu n'arrives pas à traduire ? L'un d'entre nous pourrait sans doute le faire sans problème)
--
Jedaï
Il y a cette fonction en javascript :
qui fait appel à cette fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 convertFromBase64 (buf) { while (buf.length & 3) buf += 'A'; // make 'buf' a multiple of 4 var dst = new Array; for (var i = 0; i < buf.length; i += 4) { var cc = (charToSixBits (buf.charAt(i)) << 18) | (charToSixBits (buf.charAt(i+1)) << 12) | (charToSixBits (buf.charAt(i+2)) << 6) | (charToSixBits (buf.charAt(i+3))); dst = dst.concat ((cc >> 16) & 0xff); dst = dst.concat ((cc >> 8) & 0xff); dst = dst.concat ((cc) & 0xff); } return dst; }
et l appel se fait par : var a=convertFromBase64("blablabla");
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 function charToSixBits (c) { if (c=='.') return 0; if (c >= 'A' && c <= 'Z') return c.charCodeAt(0) +1 - "A".charCodeAt(0); if (c >= 'a' && c <= 'z') return c.charCodeAt(0) + 27 - "a".charCodeAt(0); if (c >= '0' && c <= '9') return c.charCodeAt(0) + 53 - "0".charCodeAt(0); return 63; }
J'ai donc traduit par ceci :
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 sub charToSixBits { $b=ord(substr($_[0],0,1)); switch : { if($b >= 65 && $b<=90) {return ord(substr($_[0],0,1)) + 1 - ord(substr(A,0,1)); last switch;} if($b >= 97 && $b<=122) {return ord(substr($_[0],0,1)) + 27 - ord(substr(a,0,1)); last switch;} if($b >= 48 && $b<=57) {return ord(substr($_[0],0,1)) + 53 - ord(substr(0,0,1)); last switch;} if($b==46) {return 0; last switch;} } return 63; }
Mais j'obtien des résultats totalement incohérents et ca m'énerve !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 sub convertFromBase64 { for ($i=0;$i< length($_[0]);$i+=4) { $cc = (charToSixBits (ord(substr($_[0],$i,1))) << 18) | (charToSixBits (ord(substr($_[0],$i+1,1))) << 12) | (charToSixBits (ord(substr($_[0],$i+2,1))) << 6) | (charToSixBits (ord(substr($_[0],$i+3,1)))); $dst = $dst.(($cc >> 16) & 0xff); $dst = $dst.(($cc >> 8) & 0xff); $dst = $dst.(($cc) & 0xff); } return $dst; }
Tu te compliques un peu la vie... Voici une version plus simple de CharToSixBits :
Et voici la fonction de conversion (tu avais un peu oublié la première partie, et les 'chr()' à certains endroits) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 sub charToSixBits { my $c = shift; if( $c eq '.' ){ return 0; } elsif( $c =~ /[A-Z]/ ){ return ord($c) + 1 - ord('A'); } elsif( $c =~ /[a-z]/ ){ return ord($c) + 27 - ord('a'); } elsif( $c =~ /[0-9]/ ){ return ord($c) + 53 - ord('0'); } return 63; }
Normalement ça devrait faire exactement la même chose, si ce n'est pas le cas, c'est que ton script comporte une erreur autre part.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 sub convertFromBase64 { my $buf = shift; $buf .= 'A' while length($buf) & 3; my $dst; while( $buf =~ /(.)(.)(.)(.)/g ){ my $cc = (charToSixBits($1) << 18) | (charToSixBits($2) << 12) | (charToSixBits($3) << 6) | (charToSixBits($4)); $dst .= chr(($cc >> 16) & 0xff); $dst .= chr(($cc >> 8) & 0xff); $dst .= chr($cc & 0xff); } return $dst; }
--
Jedaï
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager