HTTPRequest() & Php &JSON

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

HTTPRequest() & Php &JSON

Message par falsam »

HTTPRequest()
Sous la forme d'un include, HTTPRequest() est une fonction qui permet d’exécuter un script Php sur un serveur local ou distant et de recevoir ou envoyer des données.

Pour utiliser cet include vous devez avoir des connaissances en Php et avoir un serveur local ou un serveur distant.

Vous allez pouvoir consulter trois tutoriels pour :
- Recevoir un tableau envoyé par un script Php.
- Recevoir un tableau associatif envoyé par un script Php.
- Envoyer des variables à un script Php.
- Recevoir le contenu d'une requête SQL envoyé par un script Php (En préparation actuellement)

Installation
Commencez créer un dossier dans lequel vous allez enregistrer HTTPRequest.pbi

Code : Tout sélectionner

;HTTPRequest() Version 1.10
;Contributor Falsam & CO
;Create 08 September 2014
;Update 29 September 2017

Procedure.s HTTPRequest(HostName.s, HostFolder.s, HostPort, PhpScript.s, Method.s="GET", DataSend.s="", *CallBackError=0, Mode=#PB_Network_TCP)
  Protected HostConnection.i=0
  Protected HostUrl.s
  Protected dwBytes, *Buffer, Buffer.s
  
  If InitNetwork()
   HostConnection = OpenNetworkConnection(HostName, HostPort, Mode)
   
   If HostConnection
     HostUrl = Method+" "
     HostUrl + HostFolder + PhpScript
     
     If DataSend<>""
       HostUrl+"?"+DataSend
     EndIf  
     
     HostUrl + " HTTP/1.0" + #CRLF$ + "Host: " + HostName + #CRLF$ + #CRLF$ + "Connection: Close" 
    
     If SendNetworkString(HostConnection, HostUrl, #PB_UTF8)
       Delay(200)
       *buffer = AllocateMemory(65535)
       dwBytes = 1
       While dwBytes > 0
         dwBytes = ReceiveNetworkData(HostConnection, *buffer, 65535)
       Wend
     Else
       If *CallBackError <> 0
         CallFunctionFast(*CallBackError, 3) ;Error SendNetworkString()
       Else
         ProcedureReturn "Error"
       EndIf
     EndIf
   
     CloseNetworkConnection(HostConnection)
     
     Buffer = PeekS(*Buffer, -1, #PB_UTF8 | #PB_ByteLength)
     Debug Buffer
     FreeMemory(*Buffer)

     ProcedureReturn StringField(Buffer, CountString(Buffer, #CRLF$) + 1, #CRLF$)     
     
   Else
     If *CallBackError <> 0
       CallFunctionFast(*CallBackError, 2) ;Server connection error
     Else
       ProcedureReturn "Error"
     EndIf
   EndIf  
Else 
   If *CallBackError <> 0
     CallFunctionFast(*CallBackError, 1) ;InitNetwork() Error
   Else
     ProcedureReturn "Error"
   EndIf
EndIf
EndProcedure
Tutoriel : Recevoir un tableau envoyé par un script Php.
On va commencer par faire simple. Sur mon serveur distant se trouve un script Php (test0.php) qui va renvoyer un tableau.

Code : Tout sélectionner

<?php
	$array = array("foo", "bar", "hello", "world");
	echo json_encode($array);
?>
On déclare un tableau de variables qui sera retourné par le script php dans sa représentation JSON.

Le code Pure Basic pour recevoir les données (test0.pb)

Code : Tout sélectionner

;Receive Php Arrays
IncludeFile "HTTPRequest.pbi"

Enumeration
  #Json
EndEnumeration

Global Buffer.s, i
Global Dim Result.s(0)

Buffer = HTTPRequest("s242132022.onlinehome.fr", "/racal/", 80, "test0.php")

Debug "Control Php Array : " + Buffer

If ParseJSON(#Json, Buffer)
  ;Transfer the php array to an array
  ExtractJSONArray(JSONValue(#Json), Result())
    
  ;Display the result
  For i=0 To ArraySize(Result())
    Debug Result(i)
  Next
EndIf
Buffer contiendra la représentation JSON du tableau renvoyer par le script php.

Examinons les différents paramètres de la fonction HTTPRequest()
-Paramètre 1 : Nom du serveur distant.
-Paramètre 2 : Nom du dossier distant qui contient le script php
-Paramètre 3 : Port du serveur distant. En général il prend la valeur 80
-Paramètre 4 : Le script à lancer.

* N'oubliez pas de décocher l'option unicode des paramètres de compilation.

Résultat
Control Php Array : ["foo","bar","hello","world"]
foo
bar
hello
world
A lire aussi
Tutoriel : Recevoir un tableau associatif envoyé par un script Php
Tutoriel : Envoyer des données à un script Php
Dernière modification par falsam le mar. 09/sept./2014 16:32, modifié 5 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

HTTPRequest() & Php &JSON

Message par falsam »

Tutoriel : Recevoir un tableau associatif envoyé par un script Php.

Avec ce deuxième tutoriel, nous allons recevoir le tableau associatif retourné par le script Php dans une Map.

Script Php sur le serveur distant (test1.php) qui va renvoyer un tableau associatif.

Code : Tout sélectionner

<?php
	$array = array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
	echo json_encode($array);
?>
Le code Pure Basic pour recevoir les données (test1.pb)

Code : Tout sélectionner

;Receive Php Associative Arrays
IncludeFile "HTTPRequest.pbi"

Enumeration
  #Json
EndEnumeration

Global Buffer.s
Global NewMap Result.s()

Buffer = HTTPRequest("s242132022.onlinehome.fr", "/racal/", 80, "test1.php", "GET", "")

Debug "Control Php Associative Arrays : " + Buffer

If ParseJSON(#Json, Buffer)
    ; transfer the php array to a map
    ExtractJSONMap(JSONValue(#Json), Result())
  
    ; display the result
    ForEach Result()
      Debug MapKey(Result()) + " = " + Result()
    Next
EndIf
Résultat
Control Php Associative Arrays : {"Peter":"35","Ben":"37","Joe":"43"}
Ben = 37
Joe = 43
Peter = 35
Dernière modification par falsam le mar. 09/sept./2014 16:28, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: HTTPRequest() & Php &JSON

Message par Kwai chang caine »

Merci FALSAM pour ce nouveau TUTO 8)
Ca doit etre cool cette librairie puisque tout le monde en parle ..

Le premier code marche niquel en LOCALHOST
Mais le le testPhp1 me retourne que ça :cry:

Code : Tout sélectionner

Control Php Associative Arrays : 
J'ai encore du merder quelque part, ou peut etre une extension PHP à activer sur mon serveur local :oops:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: HTTPRequest() & Php &JSON

Message par Ar-S »

J'ai pas du tout le temps de m'y intéresser pour le moment mais merci bien pour ce tuto, ces possibilités sont excellentes.
Dernière modification par Ar-S le mar. 09/sept./2014 21:17, modifié 1 fois.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: HTTPRequest() & Php &JSON

Message par falsam »

Kwai chang caine a écrit :J'ai encore du merder quelque part, ou peut etre une extension PHP à activer sur mon serveur local :oops:
Si ton premier code fonctionne, ça signifie que Php est bien activé.

Je viens de tester à nouveau avec les codes que je fourni ci-dessus et j'ai bien le résultat que j'annonce.

:?: Si tu testes les codes pure basic sans rien changer, est ce que ça fonctionne ? (Normalement oui à moins que mon serveur distant soit out)

:?: Si oui, pourquoi ça ne fonctionne pas chez toi ?
-La fatalité ? héhé :mrgreen:
-Le serveur out (لعون مالخادم)?
-Une erreur dans les paramètres ?

:arrow: Download ce petit fichier httprequest.zip et décompresse le sur ton serveur local. (N'existe plus)

Tu dois avoir dans la racine www de ton serveur un dossier qui se nomme httprequestdemo
Ce dossier httprequestdemo contient
-Le dossier <PureBasicCode>
-le fichier test0.php
-le fichier test1.php

Il ne te reste qu'à tester les deux codes Pure Basic se trouvant dans le dossier PureBasicCode (Pas très original ce nom).
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: HTTPRequest() & Php &JSON

Message par Kwai chang caine »

T'as raison ça marche 8O
Je comprend pas ou j'avais merdé :oops:

Merci beaucoup de ton envoi, je remplace mes fichier tout "pourite" par les tiens 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: HTTPRequest() & Php &JSON

Message par falsam »

Tutoriel : Envoyer des données à un script Php.
Cette fois çi on ne met pas en oeuvre JSON. Ce nouveau code va vous permettre d'envoyer des données à un script Php qui se chargera de mettre à jour une base de données MySql hébergé sur un serveur Distant. Bien entendu, ça fonctionne aussi sur un serveur local.

Cotes serveur j'ai une base de données MySQL avec une table dans laquelle est enregistré une conversation entres utilisateurs.

Le code qui permet d'envoyer des données.
Modifiez la variable User et Say avec votre pseudo et ce que vous voulez dire.

Code : Tout sélectionner

;Send data
IncludeFile "HTTPRequest.pbi"

Global User.s, Say.s, DataSend.s

;My data
User = "falsam"
Say  = "Je teste la fonction HTTPRequest"

;Format data
;A URL$ may Not contain certain characters such as: tab, space, accent letter etc., 
DataSend + "&user=" + URLEncoder(User) + "&say=" + URLEncoder(Say)

;Send data
If HTTPRequest("s242132022.onlinehome.fr", "/racal/", 80, "usersay0.php", "POST", DataSend) = ""
  MessageRequester("Information","Information ajouté")
EndIf
Depuis ce lien vous allez pouvoir vérifier que votre commentaire est bien enregistré dans la base de données.
:arrow: Historique des commentaires.

Le script php sur le serveur capture les variables user et say et les envoie à la base de données.

Extrait de code Php

Code : Tout sélectionner

...
// escape variables for security
$user = mysqli_real_escape_string($con, $_GET['user']);
$say = mysqli_real_escape_string($con, $_GET['say']);
	
$sql="INSERT INTO usersay (user, say) VALUES ('$user', '$say')";
...
je n'ai pas encore testé tout les cas de figures n'hésitez pas à le faire et n'oubliez pas votre feedback.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: HTTPRequest() & Php &JSON

Message par majikeyric »

Salut falsam,
Pourquoi à la place de HTTPRequest() ne pas utiliser ReceiveHTTPFile() de la bibliothèque HTTP ?
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: HTTPRequest() & Php &JSON

Message par falsam »

majikeyric a écrit :Pourquoi à la place de HTTPRequest() ne pas utiliser ReceiveHTTPFile() de la bibliothèque HTTP ?
HTTPRequest n'est pas une fonction native de Pure Basic.

Par contre c'est une fonction native de SpiderBasic et je me suis lancé quand quelques chose de (presque) similaire avec Pure Basic.

Peut être que je pourrais utiliser ReceiveHTTPFile() dans la procédure HTTPRequest() pour récupérer des données ou les envoyer effectivement.

J'ai un peu peur de cette fonction là mais ma peur n'est pas rationnel. :)

j'utilise SendNetworkString() et ReceiveNetworkData() pour envoyer et recevoir des données du serveur mais je ferais des tests avec ReceiveHTTPFile().

Merci majikeyric pour cette suggestion.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: HTTPRequest() & Php &JSON

Message par doudouvs »

falsam a écrit :HTTPRequest n'est pas une fonction native de Pure Basic.
Par contre c'est une fonction native de SpiderBasic et je me suis lancé quand quelques chose de (presque) similaire avec Pure Basic.
Salut Falsam, pourquoi poster dans Pb si c'est pas des fonctions Pb, je commence a plus comprendre ce forum
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: HTTPRequest() & Php &JSON

Message par falsam »

doudouvs a écrit :Salut Falsam, pourquoi poster dans Pb si c'est pas des fonctions Pb, je commence a plus comprendre ce forum
Bonjour doudouvs. Celle là c'est la meilleur de la journée je crois :)

Tu as raison je crois que je vais aller en parler ailleurs finalement. Parlons sur ce forum que des fonctions natives de Pure Basic :mrgreen:

Une petite mise au point quand même. Doudouvs je pense que comme beaucoup sur ce forum tu as du lire ce topic en diagonale. Je pense que tu n'as pas vu que HTTPRequest est une fonctionnalité codé 100% Pure Basic et que cette fonctionnalité permettait de communiquer avec des scripts Php.

PS : N'étant pas des fonctions pure basic (D'aprés Doudouvs), modérateur si tu passes par là pourrais tu supprimer l'intégralité de ce topic :)
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: HTTPRequest() & Php &JSON

Message par nico »

Même si elle n'avait pas été 100% en PureBasic, elle aurait quand même eu sa place sinon ça risque de faire beaucoup de suppression dans cette rubrique.
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: HTTPRequest() & Php &JSON

Message par doudouvs »

Ben en gros je te cite " HTTPRequest n'est pas une fonction native de Pure Basic Par contre c'est une fonction native de SpiderBasic" c'est comme comme si tu me dit que dit q'une fonction marche pas sous windows mais elle marche, puis aussi sur linux.

Je ne dit pas que tu dois en parler ailleurs je ne comprend pas pourquoi tu fait un post dans PB en parlant d'un autre logiciel

Pour moi PB n'ai pas SP. heu nico si je me trompe pas soit c'est du 100% ou rien

si HTTPRequest marche sous PB elle marche point non ?

si HTTPRequest fait partie intégrante de PB le sujet et clos pour moi.

ou je suis largué
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: HTTPRequest() & Php &JSON

Message par falsam »

doudouvs a écrit :Ben en gros je te cite " HTTPRequest n'est pas une fonction native de Pure Basic Par contre c'est une fonction native de SpiderBasic" c'est comme comme si tu me dit que dit q'une fonction marche pas sous windows mais elle marche, puis aussi sur linux. .... ou je suis largué
Tu vois tu te réponds à toi même. Tu es largué et tu n'as pas lu la phrase jusqu'au bout apparement :)

J'ai dit effectivement
falsam a écrit :HTTPRequest n'est pas une fonction native de Pure Basic. Par contre c'est une fonction native de SpiderBasic
mais lit la suite
falsam a écrit :... et je me suis lancé quand quelques chose de (presque) similaire avec Pure Basic.
Et là j'insiste encore une fois: HTTPRequest() est une fonction sous forme d'include 100% en PureBasic et de plus sans API.
doudouvs a écrit :Je ne dit pas que tu dois en parler ailleurs je ne comprend pas pourquoi tu fait un post dans PB en parlant d'un autre logiciel
Je ne parle pas d'un autre logiciel. J'ai juste dit que cette fonction existait avec le logiciel SpiderBasic et que je tentait de faire la même chose en Pure Basic.
doudouvs a écrit :Pour moi PB n'ai pas SP.
Ben justement si. Avec SpiderBasic tu codes en PureBasic et SpiderBasic va génerer le code HTML et JavaScript en s'appuyant sur le framework JavaScript Open source Dojo. Ton code Pure Basic fonctionnera via un navigateur internet. (Mince j'ai dérivé sur SpiderBasic et c'est pas du PureBasic)
doudouvs a écrit :nico si je me trompe pas soit c'est du 100% ou rien
Et ben ..... il y a du nettoyage à faire sur ce forum :mrgreen:
doudouvs a écrit :si HTTPRequest marche sous PB elle marche point non ?
Hein ? (pas compris)
doudouvs a écrit :si HTTPRequest fait partie intégrante de PB le sujet et clos pour moi.
Et je n'aurais pas fait ce topic:)
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: HTTPRequest() & Php &JSON

Message par doudouvs »

Merci pour les éclaircissements, là je comprend. J'ai aussi compris que je suis larguer en ce moment (trop de boulot tue le boulot)
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Répondre