Webgadget et retour
Webgadget et retour
Bonjour,
J'ai, pour les besoin d'une application d'appeler une adresse Web qui renvoie un code HTTP systématiquement (page toujours vide, seul un code HTTP est retourné).
J'aimerais, en fonction de ce code, que mon programme s'adapte au code retourné.
J'ai un peu cherché du côté du composant WebGadget mais je n'ai rien trouvé.
Est-ce possible ?
Sinon une autre méthode pour y parvenir ?
D'avance, merci de votre aide ^^
J'ai, pour les besoin d'une application d'appeler une adresse Web qui renvoie un code HTTP systématiquement (page toujours vide, seul un code HTTP est retourné).
J'aimerais, en fonction de ce code, que mon programme s'adapte au code retourné.
J'ai un peu cherché du côté du composant WebGadget mais je n'ai rien trouvé.
Est-ce possible ?
Sinon une autre méthode pour y parvenir ?
D'avance, merci de votre aide ^^
Dernière modification par NY152 le ven. 21/avr./2017 17:41, modifié 2 fois.
.:NY152:.
Re: Webgadget et retour
regarde du coté de ReceiveHTTPFile()
il faudra ensuite parcourir le fichier téléchargé pour trouver le code.
il faudra ensuite parcourir le fichier téléchargé pour trouver le code.
- JohnJohnsonSHERMAN
- Messages : 648
- Inscription : dim. 13/déc./2015 11:05
- Localisation : Allez, cherche...
- Contact :
Re: Webgadget et retour
@Cage : ReceiveHTTPFile() ne permet pas de voir le header, or le code de retour HTTP se trouve dans le header HTTP, il faut donc récupérer le header lui-même.
La solution la plus simple est d'utiliser GetHTTPHeader() pour récupérer le header, et de chercher dedans le code de retour (avec StringField(),2éme champ pour la valeur numérique et 3éme champ pour le code texte)
Ce header aura cette forme :
Ici le code de retour est 200 OK
La solution la plus simple est d'utiliser GetHTTPHeader() pour récupérer le header, et de chercher dedans le code de retour (avec StringField(),2éme champ pour la valeur numérique et 3éme champ pour le code texte)
Ce header aura cette forme :
Code : Tout sélectionner
HTTP/1.1 200 OK
Date: <date de génération>
Server: <nom du serveur>
[...]
Content-Type: <type MIME du contenu, vide ici>
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.
CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
Votre expert national en bogage et segfaults.
CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
- Windows 10 x64 - PB 5.61 x64
- Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Re: Webgadget et retour
@JohnJohnsonSHERMAN
Ne pas confondre mon alias (cage) avec celui de (case)
Tu n'est pas le premier a faire cette confusion.
Pas grave en soi.
cage
Ne pas confondre mon alias (cage) avec celui de (case)
Tu n'est pas le premier a faire cette confusion.
Pas grave en soi.
cage
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Re: Webgadget et retour
N'est retourné que le code source de la page, pas le headercase a écrit :regarde du coté de ReceiveHTTPFile()
il faudra ensuite parcourir le fichier téléchargé pour trouver le code.
J'ai tenté un exemple tout bête et il ne fonctionne pas :JohnJohnsonSHERMAN a écrit :@Cage : ReceiveHTTPFile() ne permet pas de voir le header, or le code de retour HTTP se trouve dans le header HTTP, il faut donc récupérer le header lui-même.
La solution la plus simple est d'utiliser GetHTTPHeader() pour récupérer le header, et de chercher dedans le code de retour (avec StringField(),2éme champ pour la valeur numérique et 3éme champ pour le code texte)
Ce header aura cette forme :Ici le code de retour est 200 OKCode : Tout sélectionner
HTTP/1.1 200 OK Date: <date de génération> Server: <nom du serveur> [...] Content-Type: <type MIME du contenu, vide ici>
Code : Tout sélectionner
EnableExplicit
InitNetwork()
Global EnTete.s = GetHTTPHeader("http://www.purebasic.com/index.php")
Global Ligne.s = ""
Global Index.i = 0
Repeat
Index+1
Ligne = StringField(EnTete, Index, #LF$)
Debug Ligne
If Trim(Ligne) = "HTTP/1.1 200 OK"
MessageRequester("", "HTTP/1.1 200 OK")
EndIf
Until Ligne = ""
Si le HTTP/1.1 200 OK est bien affiché dans le debugger, mon MessageRequester, lui, ne s'affiche pas ...
Y a t-il une évidence qui ne me saute pas aux yeux ?
.:NY152:.
Re: Webgadget et retour
Plus simple: FindString
Code : Tout sélectionner
InitNetwork()
If FindString(GetHTTPHeader("http://www.purebasic.com/index.php"), "200 OK")
Debug "Site OK :-)"
Else
Debug "Site KO :-("
EndIf
Re: Webgadget et retour
Effectivement ça fonctionne, j'aurais dû penser à FindString() ^^
Encore merci
Encore merci
.:NY152:.
Re: [Résolu] Webgadget et retour
Ah ben non ...
Finalement ça fonctionne pas et je pense que cela vient de la fonction GetHTTPHeader() en elle-même !
Pourquoi ? Si on pointe vers une page "standard" (exemple : http://www.purebasic.com/index.php), pas de soucis
Mais si on veut pointer vers un truc du genre : http://www.toto.com/send.php?user=toto& ... 20World%20! Là ça ne fonctionne plus ! Je tombe sur une erreur 400 et l'URL n'est pas interprétée correctement par le serveur ! Pourquoi ?
Finalement ça fonctionne pas et je pense que cela vient de la fonction GetHTTPHeader() en elle-même !
Pourquoi ? Si on pointe vers une page "standard" (exemple : http://www.purebasic.com/index.php), pas de soucis
Mais si on veut pointer vers un truc du genre : http://www.toto.com/send.php?user=toto& ... 20World%20! Là ça ne fonctionne plus ! Je tombe sur une erreur 400 et l'URL n'est pas interprétée correctement par le serveur ! Pourquoi ?
.:NY152:.
Re: Webgadget et retour
Oui,une erreur 400 et l'URL n'est pas interprétée correctement par le serveur
400 Bad Request La syntaxe de la requête est erronée.
https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP
= La requête envoyée est mal formée, donc mal comprise par le serveur
Une URL avec passage de paramètre passe bien. Preuve avec mon système de vérification de mise à jour
Code : Tout sélectionner
InitNetwork()
URL.s = "http://md.acme.software.free.fr/ACME_Desk_Version.php?V=3.9.31"
If FindString(GetHTTPHeader(URL), "200 OK")
Debug "Site OK :-)"
Else
Debug "Site KO :-("
EndIf
Il ne faut pas encorder tous les caractères car certains sont des codes de contrôles (séparateurs)
Effectivement on peut encoder par exemple "&" pour être lu tel quel si la totalité du reste de l'url doit être interprétée comme du texte, cela dépend de ce qu'attend le serveur. (je m'exprime sans doute mal, désolé)
Re: Webgadget et retour
Si j'utilise la même URL dans un WebGadget, la requette est bien gérée par le serveur (mais je n'ai pas le header HTTP)
Si j'utilise GetHTTPHeader() et ou sans URLEncoder(), j'ai le header HTtP mais mes requêtes n'aboutisse pas ...
Y a quand même (... censure sur une sombre histoire de potage et de ... bref)
Si j'utilise GetHTTPHeader() et ou sans URLEncoder(), j'ai le header HTtP mais mes requêtes n'aboutisse pas ...
Y a quand même (... censure sur une sombre histoire de potage et de ... bref)
.:NY152:.
Re: Webgadget et retour
Voir http://www.purebasic.fr/french/viewtopi ... =1&t=16483
Un GetHTTPHeader() ne fonctionne pas pour certaines pages car il faut fournir un Header particulier lors de la requête.
Il faut utiliser Fiddler avec IE ou Edge pour voir l'échange entre le navigateur et le serveur.
Le GetHTTPHeader() est trop basique pour faire un échange complet alors qu'un WebGadget qui s'appuie sur le moteur IE4 sait reproduire le même fonctionnement qu'un navigateur.
Un Wget en ligne de commande permet de résoudre le problème et Curl doit/devrait le permettre aussi.
Un GetHTTPHeader() ne fonctionne pas pour certaines pages car il faut fournir un Header particulier lors de la requête.
Il faut utiliser Fiddler avec IE ou Edge pour voir l'échange entre le navigateur et le serveur.
Le GetHTTPHeader() est trop basique pour faire un échange complet alors qu'un WebGadget qui s'appuie sur le moteur IE4 sait reproduire le même fonctionnement qu'un navigateur.
Un Wget en ligne de commande permet de résoudre le problème et Curl doit/devrait le permettre aussi.
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Re: Webgadget et retour
Le post que tu indique reprend une source sur Github qui a été modifié pour fonctionner dont le code n'est pas fourni donc ça ne m'avance pas ...
.:NY152:.
- JohnJohnsonSHERMAN
- Messages : 648
- Inscription : dim. 13/déc./2015 11:05
- Localisation : Allez, cherche...
- Contact :
Re: Webgadget et retour
Tu peux aussi construire toi-même le header, à condition de savoir ce qu'il a de "spécial", et ce grâce à la lib Network, sachant qu'un header HTML se compose uniquement de texte. En utilisant SendNetworkString() ou SendNetworkData(), ca devrait marcher
Mais je suppose que tu as un exemple du header à envoyer ?
Mais je suppose que tu as un exemple du header à envoyer ?
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.
CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
Votre expert national en bogage et segfaults.
CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
- Windows 10 x64 - PB 5.61 x64
- Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé