PureBasic
https://www.purebasic.fr/french/

Webgadget et retour
https://www.purebasic.fr/french/viewtopic.php?f=15&t=16655
Page 1 sur 2

Auteur:  NY152 [ Ven 21/Avr/2017 13:05 ]
Sujet du message:  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 ^^

Auteur:  case [ Ven 21/Avr/2017 13:15 ]
Sujet du message:  Re: Webgadget et retour

regarde du coté de ReceiveHTTPFile()

il faudra ensuite parcourir le fichier téléchargé pour trouver le code.

Auteur:  JohnJohnsonSHERMAN [ Ven 21/Avr/2017 13:36 ]
Sujet du message:  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 :
Code:
  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

Auteur:  cage [ Ven 21/Avr/2017 14:36 ]
Sujet du message:  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

Auteur:  NY152 [ Ven 21/Avr/2017 14:45 ]
Sujet du message:  Re: Webgadget et retour

Merci à vous ^^

Je vais creuser ça !

Auteur:  NY152 [ Ven 21/Avr/2017 15:52 ]
Sujet du message:  Re: Webgadget et retour

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

Auteur:  Marc56 [ Ven 21/Avr/2017 16:16 ]
Sujet du message:  Re: Webgadget et retour

Plus simple: FindString

Code:
InitNetwork()

If FindString(GetHTTPHeader("http://www.purebasic.com/index.php"), "200 OK")
     Debug "Site OK :-)"
Else
     Debug "Site KO :-("
EndIf

:wink:

Auteur:  NY152 [ Ven 21/Avr/2017 17:00 ]
Sujet du message:  Re: Webgadget et retour

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

Encore merci :)

Auteur:  NY152 [ Ven 21/Avr/2017 17:41 ]
Sujet du message:  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 ?

Auteur:  Marc56 [ Sam 22/Avr/2017 6:51 ]
Sujet du message:  Re: Webgadget et retour

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

Auteur:  NY152 [ Sam 22/Avr/2017 20:02 ]
Sujet du message:  Re: Webgadget et retour

Ne fonctionne pas davantage avec URLEncoder ... Je désespère :(

Auteur:  NY152 [ Sam 22/Avr/2017 20:14 ]
Sujet du message:  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)

Auteur:  cage [ Sam 22/Avr/2017 23:05 ]
Sujet du message:  Re: Webgadget et retour

Voir viewtopic.php?f=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.

Auteur:  NY152 [ Dim 23/Avr/2017 0:33 ]
Sujet du message:  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 ...

Auteur:  JohnJohnsonSHERMAN [ Dim 23/Avr/2017 10:34 ]
Sujet du message:  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 ?

Page 1 sur 2 Heures au format UTC + 1 heure
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/