Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

émuler l'exécution d'une fonction Javascript

5 réponses
Avatar
laurent
Bonjour,

tout d'abord, je dois dire que je ne connais quasiment rien à JavaScript :(
Je souhaiterai automatiser des requêtes vers un serveur qui pour me
délivrer le service qui m'intéresse me fournit une page .aspx. Cette
page dispose entre autre d'une fonction JavaScript reproduite ci-dessous:


function generate() {
var bars = document.getElementById("bars").checked ? "1" : "0";
var clouds = document.getElementById("clouds").checked ? "1" : "0";
var url = "/cgi/foobar.exe?"
url += "width=" + document.getElementById("width").value;
url += "&height=" + document.getElementById("height").value;
url += "&height=" + document.getElementById("height").value;
url += "&center=" + document.getElementById("select_center").value;
url += "&bars=" + bars;
url += "&clouds=" + clouds;
url += "&utc=" + (the_calendar.date.getTime() / 1000);
window.open(url, "_top");
}

Cette fonction est normalement appelée par un bouton dont le code HTML
extrait de cette même page .aspx est normalement le suivant:

</td><td><input type="button" onclick="generate();"
value="Generate..."></td></tr>


Dans mon programme client qui va faire des requêtes à intervalle
régulier, quelle devra être la commande à envoyer au serveur pour
effectuer l'équivalent de ce qu'exécute la commande generate() quand je
clique sur le bouton "Generate..." ?
Comment est pris en compte la ligne 'var url = "/cgi/foobar.exe?"' ?
Je présume qu'il s'agit d'un adresse relative à celle de la page .aspx
contenant cette fonction, mais je ne sais pas exactement comment
reconstituer l'adresse complète.

Je présume que ma question va déborder un peu du forum puisqu'il ne
s'agit pas de JavaScript mais je souhaiterai savoir de quelle type doit
être cette requête ? POST, ... ?

N'hésitez pas à me dire si je dois poster sur un autre forum.
Merci pour vos éclairages,


Laurent

5 réponses

Avatar
Patrick Mevzek
Le Mon, 23 Feb 2009 17:54:23 +0100, laurent a écrit:
Dans mon programme client qui va faire des requêtes à intervalle
régulier, quelle devra être la commande à envoyer au serveur pour
effectuer l'équivalent de ce qu'exécute la commande generate() quand je
clique sur le bouton "Generate..." ?
Comment est pris en compte la ligne 'var url = "/cgi/foobar.exe?"' ?
Je présume qu'il s'agit d'un adresse relative à celle de la page .aspx



Non. Cela commence par un / c'est donc une URL relative.
Au final ca doit faire qqchose comme :
http://www.example.com/cgi/foobar.exe?width=X&height=Y&center=Z&bars=B&clouds=C
(remplacer X,Y,Z,C par ce qui va bient)
Le &utc peut peut-être être oublié, si ca ne marche pas l'ajouter avec la
bonne valeur.

Attention cependant: techniquement le serveur peut essayer de "vérifier"
d'où vient la requête (notamment via l'en-tête Referer) et refuser si cela
ne vient pas de la bonne page. Cela peut se contourner, et même au-delà
s'il utilise des cookies et/ou authentification (tout dépend de votre
langage de programmation c'est plus ou moins facile) mais vous allez
éventuellement contrevenir soit à la politesse (si vous exagérez) soit aux
conditions d'utilisations du service en question.

Je présume que ma question va déborder un peu du forum puisqu'il ne
s'agit pas de JavaScript mais je souhaiterai savoir de quelle type doit
être cette requête ? POST, ... ?



C'est un simple GET, vous pouvez copier coller l'URL dans votre navigateur
pour voir le résultat. D'alleurs comme le script JS fait window.open si
vous utilisez la page en question vous pourriez même regarder la barre de
navigation pour trouver l'URL plus haut.

--
Patrick Mevzek . . . . . . . . . . . . . . Dot and Co
<http://www.dotandco.net/> <http://www.dotandco.com/>
<http://www.dotandco.net/ressources/icann_registrars/prices>
<http://icann-registrars-life.dotandco.net/>
Avatar
Pascal PONCET
laurent a écrit :
Dans mon programme client qui va faire des requêtes à intervalle
régulier, quelle devra être la commande à envoyer au serveur pour
effectuer l'équivalent de ce qu'exécute la commande generate() quand je
clique sur le bouton "Generate..." ?
Comment est pris en compte la ligne 'var url = "/cgi/foobar.exe?"' ?
Je présume qu'il s'agit d'un adresse relative à celle de la page .aspx
contenant cette fonction, mais je ne sais pas exactement comment
reconstituer l'adresse complète.



Bonjour,

Il suffit de copier la fonction "generate()" et le bout de HTML qui va
avec (ou passer les valeurs de "bars" et "clouds" en dur).

Ensuite, utiliser la méthode "setInterval()" pour déclencher la fonction
toutes les X millisecondes.

Le seul truc à changer, si j'ai bien compris que le script s'exécutera
sur un autre serveur, c'est effectivement l'URL appelée en popup (genre
"http://www.le_super_serveur/cgi/foobar.exe?").

En option, on peut aussi échanger le popup contre un "iframe" ou encore
une requête Ajax, mais c'est autre chose.

Reste à savoir si le script ASPX du serveur est d'accord (il peut
détecter le nombre de requêtes sur une même adresse IP pour une période
donnée, et faire un blocage anti-hacking).

Cordialement,
Pascal
Avatar
laurent
Patrick Mevzek a écrit :
Le Mon, 23 Feb 2009 17:54:23 +0100, laurent a écrit:
Dans mon programme client qui va faire des requêtes à intervalle
régulier, quelle devra être la commande à envoyer au serveur pour
effectuer l'équivalent de ce qu'exécute la commande generate() quand je
clique sur le bouton "Generate..." ?
Comment est pris en compte la ligne 'var url = "/cgi/foobar.exe?"' ?
Je présume qu'il s'agit d'un adresse relative à celle de la page .aspx



Non. Cela commence par un / c'est donc une URL relative.
Au final ca doit faire qqchose comme :
http://www.example.com/cgi/foobar.exe?width=X&height=Y&center=Z&bars=B&clouds=C
(remplacer X,Y,Z,C par ce qui va bient)



Est ce que vous faites l'hypothèse que ma page .aspx était juste sous
"la racine" pour construire cette adresse ou est ce que le fait que ça
commence par le caractère / qui fait que 'cgi' se retrouve juste après
www.example.com dans votre exemple?

Le &utc peut peut-être être oublié, si ca ne marche pas l'ajouter avec la
bonne valeur.

Attention cependant: techniquement le serveur peut essayer de "vérifier"
d'où vient la requête (notamment via l'en-tête Referer) et refuser si cela
ne vient pas de la bonne page. Cela peut se contourner, et même au-delà
s'il utilise des cookies et/ou authentification (tout dépend de votre
langage de programmation c'est plus ou moins facile) mais vous allez
éventuellement contrevenir soit à la politesse (si vous exagérez) soit aux
conditions d'utilisations du service en question.



J'avais saisi l'adresse tel que vous l'avez construite dans mon
navigateur avant de passer à la solution programmatique, en devinant que
le '+' devait faire une concaténation, mais ça n'a pas fonctionné, je me
retrouve avec une erreur 404.
D'un point de vue politesse/utilisation, je pense rester respectueux de
la logique du serveur en lui demandant un fichier JPEG taille plein
écran toutes les 10 minutes. Le service ne propose qu'un seul fichier
pour tous les utilisateurs à un instant donné de la journée, mais qui
peut varier en taille (résolution de l'écran).


Je présume que ma question va déborder un peu du forum puisqu'il ne
s'agit pas de JavaScript mais je souhaiterai savoir de quelle type doit
être cette requête ? POST, ... ?



C'est un simple GET, vous pouvez copier coller l'URL dans votre navigateur
pour voir le résultat. D'alleurs comme le script JS fait window.open si
vous utilisez la page en question vous pourriez même regarder la barre de
navigation pour trouver l'URL plus haut.



Malheureusement l'adresse n'apparaît pas (Firefox 3.06 / Kubuntu Hardy
Heron), sinon ça m'aurait enlevé une belle épine du pied.
Je vais refaire des essais avec vos conseils, j'ai du mal saisir
l'adresse dans la barre de navigation.

Merci pour vos précieux conseils,

Laurent




Avatar
laurent
Pascal PONCET a écrit :
<snip>

Reste à savoir si le script ASPX du serveur est d'accord (il peut
détecter le nombre de requêtes sur une même adresse IP pour une période
donnée, et faire un blocage anti-hacking).



Ahhh, encore une raison qui expliquerait mes déboires ...
Je devrais normalement détecter le phénomène en effectuant les requêtes
à la main (clics sur bouton "Requête ...") si je comprends bien ?

Merci pour votre aide,


Laurent


Cordialement,
Pascal



Avatar
Patrick Mevzek
Le Mon, 23 Feb 2009 21:31:10 +0100, laurent a écrit:
Non. Cela commence par un / c'est donc une URL relative.
Au final ca doit faire qqchose comme :
http://www.example.com/cgi/foobar.exe?width=X&height=Y&center=Z&bars=B&clouds=C
(remplacer X,Y,Z,C par ce qui va bient)



Est ce que vous faites l'hypothèse que ma page .aspx était juste sous
"la racine" pour construire cette adresse ou est ce que le fait que ça
commence par le caractère / qui fait que 'cgi' se retrouve juste après
www.example.com dans votre exemple?



Il n'y a pas de supposition à faire, votre URL est absolue car elle
commence par / et donc où que soit présent ce lien dans l'arborescence, le
/ initial le fait pointer à la racine du serveur et l'URL doit donc être
accolée telle quelle au nom du serveur.

J'avais saisi l'adresse tel que vous l'avez construite dans mon
navigateur avant de passer à la solution programmatique, en devinant que
le '+' devait faire une concaténation, mais ça n'a pas fonctionné, je me
retrouve avec une erreur 404.



Il est peut-être plus simple "d'espionner" le fonctionnement normal, en
regardant l'URL dans votre navigateur ou au pire avec un sniffer réseau,
genre urlsnarf.

Malheureusement l'adresse n'apparaît pas (Firefox 3.06 / Kubuntu Hardy
Heron), sinon ça m'aurait enlevé une belle épine du pied.



Essayez un CTRL+L puis CTRL+A puis CTRL+C ce qui doit copier l'URL en
question que vous pouvez coller après où vous voulez pour l'inspecter.

--
Patrick Mevzek . . . . . . . . . . . . . . Dot and Co
<http://www.dotandco.net/> <http://www.dotandco.com/>
<http://www.dotandco.net/ressources/icann_registrars/prices>
<http://icann-registrars-life.dotandco.net/>