Webgadget et retour

Codes specifiques à Windows
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Webgadget et retour

Message par NY152 »

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 ^^
Dernière modification par NY152 le ven. 21/avr./2017 17:41, modifié 2 fois.
.:NY152:.
Avatar de l’utilisateur
case
Messages : 1527
Inscription : lun. 10/sept./2007 11:13

Re: Webgadget et retour

Message par case »

regarde du coté de ReceiveHTTPFile()

il faudra ensuite parcourir le fichier téléchargé pour trouver le code.
ImageImage
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Webgadget et retour

Message par JohnJohnsonSHERMAN »

@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 :

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>
Ici le code de retour est 200 OK
:P
"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
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Webgadget et retour

Message par cage »

@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
■ 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
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: Webgadget et retour

Message par NY152 »

Merci à vous ^^

Je vais creuser ça !
.:NY152:.
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: Webgadget et retour

Message par NY152 »

case a écrit :regarde du coté de ReceiveHTTPFile()

il faudra ensuite parcourir le fichier téléchargé pour trouver le code.
N'est retourné que le code source de la page, pas le header
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 :

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>
Ici le code de retour est 200 OK
:P
J'ai tenté un exemple tout bête et il ne fonctionne pas :

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 = ""
Ici j'essaie juste de choper le HTTP/1.1 200 OK et m'en avertir

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:.
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Webgadget et retour

Message par Marc56 »

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
:wink:
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: Webgadget et retour

Message par NY152 »

Effectivement ça fonctionne, j'aurais dû penser à FindString() ^^

Encore merci :)
.:NY152:.
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: [Résolu] Webgadget et retour

Message par NY152 »

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 ?
.:NY152:.
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Webgadget et retour

Message par Marc56 »

une erreur 400 et l'URL n'est pas interprétée correctement par le serveur
Oui,
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
:arrow: Utilise UrlEncoder plutôt que l'encodage manuel.

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é)

:wink:
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: Webgadget et retour

Message par NY152 »

Ne fonctionne pas davantage avec URLEncoder ... Je désespère :(
.:NY152:.
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: Webgadget et retour

Message par NY152 »

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)
.:NY152:.
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Webgadget et retour

Message par cage »

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.
■ 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
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: Webgadget et retour

Message par NY152 »

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:.
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Webgadget et retour

Message par JohnJohnsonSHERMAN »

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 ?
"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
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Répondre