Avec PureBasic 5.70 Fred nous apporte une nouvelle fonction à laquelle on ne s'attendait pas, mais qui est très utile: HTTPRequest() Cette fonction n'est pas encore documentée dans l'aide, donc en attendant, je me lance dans ce petit tuto simplifié.
À quoi cela sert-il ? Tout simplement à utiliser les WebServices
Oui, mais, les WebServices, c'est quoi ?
Cette technique existe depuis très longtemps, mais est souvent expliquée d'une manière incompréhensible (fouillis de noms et de normes)
En quelque mots: Un WebServices fonctionne comme une API mais exploitée au travers du protocole HTTP.
C'est tout
Perso, j’appelle ça un distributeur automatique de données. Des tas d'applications utilisent ce système, notamment les applis sur les téléphones, par exemple pour avoir des infos sur les horaires de bus.
Techniquement, on envoie un formulaire (vers un serveur HTTP) et on reçoit la réponse sous forme d'un flux (le plus souvent XML ou JSON)
Envoi et réception se font sans navigateur. Une question, une réponse. Pas de connexion persistante (fonctionnement sans état)
Il y a plusieurs façons d'envoyer, de recevoir (et de faire d'autres choses)
Je parlerais ici de deux méthodes d'envoi, qui sont les même que celles de formulaires
GET : Les données sont envoyées dans l'URl http://.... ? .... & ... = ... & ...
POST: Les données sont envoyées dans l'environnement
Avantages + et inconvénients -
GET
+ Une seule ligne, donc on peut bookmarquer
- Il faut encoder l'URl à cause des espaces et des accents
- Limitation de la longueur
- Les mots de passe sont dans l'URl
POST
+ Taille de données quasi illimitée
+ Pas besoin d'encoder accents, espaces
- On ne bookmarque que l'adresse et pas les données
Un tas de serveur proposent des services, je vais ici faire un exemple en utilisant un serveur qui propose la conversion de monnaies
Le principe est simple, on envoie https://www.ecb.europa.eu/stats/eurofxr ... -daily.xml
Le serveur retourne un flux XML dans HTTPInfo(HTTPRequest, #PB_HTTP_Response)
Il suffit d'extraire la/les données souhaitées
On peut se servir des fonctions XML de PB, mais comme dans ce exemple je ne cherche qu'une seule valeur, ça va plus vite avec les RegEx mais on peut le faire aussi avec les fonctions String.
(hum, c'est aussi parce que j'ai encore du mal à comprendre les fonctions XML et JSON)
Code : Tout sélectionner
EnableExplicit
InitNetwork()
Define HttpRequest = HTTPRequest(#PB_HTTP_Get, "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml")
; Le résultat est reçu sous forme de fichier XML, mais pour une seule valeur il est plus facile d'extraire par RegEx.
; Trouver et extraire USD et valeur dans <Cube currency='USD' rate='1.1606'/>
If HttpRequest
Define HTTP_Data$ = HTTPInfo(HTTPRequest, #PB_HTTP_Response)
Define HTTP_Code$ = HTTPInfo(HTTPRequest, #PB_HTTP_ErrorCode)
If HTTP_Code$ = "200" ; OK
; Extraire le code et sa valeur
If CreateRegularExpression(0, "(USD). rate=.(\d+\.\d+)./")
If ExamineRegularExpression(0, HTTP_Data$)
While NextRegularExpressionMatch(0)
Debug " 1 " + RegularExpressionGroup(0, 1) +
" = " + RegularExpressionGroup(0, 2) +
" EUR"
Wend
Else
Debug "Pas de valeur"
EndIf
FreeRegularExpression(0)
Else
Debug "RegEx KO"
EndIf
Debug ~"\n\n\n--- Informations sur la transaction"
Debug "Code réponse du serveur : " + HTTP_Code$
Debug "Réponse XML complète du serveur :"
Debug RSet("", 80, "-") + #CRLF$ + HTTP_Data$ + #CRLF$ + RSet("", 80, "-")
Else
Debug "Erreur serveur : " + HTTP_Code$
EndIf
EndIf
End
Vous constatez que c'est très rapide, car il n'y a pas de navigateur, de javascript etc, serveur et client ne font donc presque rien.
Cette technique est utilisée de plus en plus même sur des réseau locaux et pour faire communiquer des programmes incompatibles et se nomme alors ESB (Entreprise Service Bus)
Il existe des tas de serveurs, surtout depuis l'ouverture des données.
À chaque fois, il faut aller voir dans la doc quels sont les adresses et le format des données.
Les serveurs de WebServices sont en général gratuit jusqu'à une certaine quantité de requêtes par heure/jour.
Dans certains cas, il faut s'inscrire pour obtenir une clé qu'on met ensuite dans le formulaire.
Enjoy