PureBasic

Forums PureBasic
Nous sommes le Mar 17/Sep/2019 17:39

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 10 messages ] 
Auteur Message
 Sujet du message: HTTPRequest() Envoyer des données à un script Php
MessagePosté: Ven 05/Oct/2018 23:09 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6849
Localisation: IDF (Yvelines)
PB Version : 5.70

■ Syntaxe : HTTPRequest( Type, URL$, [, Data$ [, Flags [, Headers()]]] )

- Type #PB_HTTP_Get, #PB_HTTP_Post, Etc ....
- URL$ Domaine et nom du script invoqué

- Data$ Variables qui seront envoyés aux script Php (Falcultatifs)
- Flags 0 pour le moment (Falcultatifs)
- Headers() Map contenant des entêtes HTTP (Falcultatifs)

■ Objectif : Envoyer une structure de contact à un script Php.

1 - Sécuriser le script PHP afin de ne pas pouvoir l'utiliser depuis un navigateur par exemple.
     On se servira de la map Header() pour envoyer une information de sécurisation.
     Le nom de l'application et un numéro de version par exemple.
Code:
NewMap Header.s()
Header("User-Agent")   = "Application/5.0.0.1"
Dans le script php on testera cette information
Code:
if ($_SERVER['HTTP_USER_AGENT'] == 'Application/5.0.0.1'){
}

2 - Préparer les données de contact à transmettre au script Php.
Code:
; Contact
Structure NewContact
  name.s
  age.i
  city.s
EndStructure
Define Contact.NewContact, UserData.s

With Contact
  \name = "John"
  \age = 31
  \city = "New York"
EndWith
La structure de contact sera transmise via un objet JSON. Le code est simple.
Code:
If CreateJSON(0)
  InsertJSONStructure(JSONValue(0), @Contact, NewContact)
  UserData = ComposeJSON(0, #PB_JSON_PrettyPrint)
EndIf
Rien de bien compliqué.

3 - Exécuter la requête HTTP
Code:
Url.s = "http://s242132022.onlinehome.fr/hr/demojson.php"
HTTPRequest(#PB_HTTP_Post, Url, UserData, 0, Header())

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: HTTPRequest() Envoyer des données à un script Php
MessagePosté: Ven 05/Oct/2018 23:11 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6849
Localisation: IDF (Yvelines)
■ Code PureBasic (demojson.pb) que vous pouvez tester.
Code:
EnableExplicit

; Url of the php script
Define Url.s = "http://s242132022.onlinehome.fr/hr/demojson.php"

; Authentication of the transacion. HTTP header to send to the Php script.
NewMap Header.s()
Header("User-Agent")   = "Application/5.0.0.1"

; Contact
Structure NewContact
  name.s
  age.i
  city.s
EndStructure
Define Contact.NewContact, UserData.s

With Contact
  \name = "John"
  \age = 31
  \city = "New York"
EndWith

; Insert the content of the Structure "Contact" into a JSON object
If CreateJSON(0)
  InsertJSONStructure(JSONValue(0), @Contact, NewContact)
  UserData = ComposeJSON(0, #PB_JSON_PrettyPrint)
EndIf

; Executes the HTTP request
Define Result =  HTTPRequest(#PB_HTTP_Post, Url, UserData, 0, Header())

If Result
  Debug  HTTPInfo(Result, #PB_HTTP_Response )   
  FinishHTTP(Result)
 
Else
 
  Debug "Error"
  Debug HTTPInfo(Result, #PB_HTTP_ErrorCode)
EndIf
■ Script Php (demojson.php) qui va recevoir les données.
Code:
<?php
   //Test authentication(Header)
   if ($_SERVER['HTTP_USER_AGENT'] == 'Application/5.0.0.1'){
      echo 'Authorized access' . "\r";
      
      // Receives the json file
      $userdata = json_decode(file_get_contents('php://input'));
      
      // Return the result
      echo "Hello " . $userdata->name . "\r";
      echo "Your age " . $userdata->age . "\r";
      echo "You live in " . $userdata->city;
      
   } else {
      
      echo 'No authorization. Go away ^-^';
   }
?>

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: HTTPRequest() Envoyer des données à un script Php
MessagePosté: Sam 06/Oct/2018 8:34 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6650
Localisation: Isere
Maintenant je sais qui je suis et ou j'habite :mrgreen:
Marche nickel, merci FALSAM de cette présentation claire et détaillée, comme dab 8)

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: HTTPRequest() Envoyer des données à un script Php
MessagePosté: Sam 06/Oct/2018 13:52 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8750
Merci pour ces exemples, ça m'intéresse beaucoup. Faut que je m'y mettre à cette 5.70.
Je trouve tout de même cette syntaxe étrange
Code:
Result =  HTTPRequest(#PB_HTTP_Get

Dans mon esprit ça aurait du avoir la tronche d'un #PB_HTTP_Post vu qu'on envoie quelque chose.

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: HTTPRequest() Envoyer des données à un script Php
MessagePosté: Sam 06/Oct/2018 14:53 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6849
Localisation: IDF (Yvelines)
Ar-S a écrit:
Dans mon esprit ça aurait du avoir la tronche d'un #PB_HTTP_Post vu qu'on envoie quelque chose.
et #PB_HTTP_Get parce que j'ai des données en retour :mrgreen:

Si ça a une importance pour l'envoie d'un formulaire HTML, je pense que de dans cet exemple ça n'a aucune importance car on ne récupère pas les données avec la méthode PHP $_POST ou $_GET.

J'ai modifié le source PureBasic avec la méthode POST.

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: HTTPRequest() Envoyer des données à un script Php
MessagePosté: Sam 06/Oct/2018 20:37 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1595
GET et POST ne sont que des mots clé et ne représentent pas l'action réelle.
Dans les deux cas il peut y avoir retour d'information ou pas. C'est le serveur qui décide.
Par convention, on utilise GET pour une requête qui ne modifie pas les données serveur (ex: appel d'une image) et POST dans le cas contraire.

Avantages (+) et Inconvénients (-) et dans quel cas utiliser plutôt l'une que l'autre

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
- Les données sont conservées dans le cache

POST
+ Taille de données quasi illimitée
+ Pas besoin d'encoder accents, espaces
+ Les données envoyées ne sont pas conservées en cache
- On ne bookmarque que l'adresse et pas les données

Référence officielle: RFC 2616 (Chapitre 9.3 et 9.5)

:wink:

_________________
Windows 10 Famille x64 + Linux (Slackware, Debian sur Oracle VirtualBox 6.0)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: HTTPRequest() Envoyer des données à un script Php
MessagePosté: Dim 07/Oct/2018 12:23 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 14/Oct/2004 19:48
Messages: 1121
Merci pour l'exemple ! Image

_________________
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 5.45LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: HTTPRequest() Envoyer des données à un script Php
MessagePosté: Ven 02/Aoû/2019 11:29 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1655
Localisation: Belgique
Un grand merci pour ce tuto, qui va me être très utile.

J'ai juste un petit soucis avec les accents

Grand Duché de Luxembourg

aux lieu de Grand Duché de Luxembourg

EDIT : le problème est résolus comme ceci (en PHP)

Code:
$name = utf8_decode($userdata->name);

_________________
Windows 10 64 bits PB: 5.70 ; 5.71 beta 2


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: HTTPRequest() Envoyer des données à un script Php
MessagePosté: Ven 23/Aoû/2019 8:55 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1655
Localisation: Belgique
Je me permet de poster la méthode inverse pour récupérer des données d'un de vos sites

Voici un exemple d'un des sites que je crée actuellement sans les bonnes adresses évidement.

Code de la page php

Code:
<?php
if ($_SERVER['HTTP_USER_AGENT'] == 'Application/8.4.2.1') {
    require_once 'Database.php';
    $db = new Database();
    $stm = $db->createStatement("SELECT id,id_dispached,old_member,new_member FROM dispached_edit");
    if ($stm->execute()) {
        $res = $stm->fetchAll(PDO::FETCH_ASSOC);
        $json = json_encode($res);
        unset($db);
        echo $json;
    }else{
        echo 'ERROR';
    }
}else{
    die('access denied');
}


Code de la class PHP Database.php qui sert à la connection mySql
Code:
class Database {
//  local parameters
    const db_host = 'localhost';
    const db_name = 'udf_db';
    const db_user = 'root';
    const db_psw = 'root';

//    online parameters   
//    const db_host = 'localhost';
//    const db_name = 'your db name';
//    const db_user = 'your user name';
//    const db_psw = 'your password';
   
    private $connection = null;
    private $statement = null;
    /* CONSTRUCTOR
     * -> create also PDO
     */
    function __construct() {
        try{
            $this->connection = new PDO('mysql:host='. self::db_host.';dbname='.self::db_name, self::db_user,self:: db_psw);
        } catch (PDOException $ex) {
            die($ex->getMessage());
        }
       
    }
    /* DESTRUCTOR
     * -> destruct aldo PDO
     */
    function __destruct() {
        $this->connection = null;
    }
   
    /* CREATE A STATEMENT
     * create a new statement
     */
    function createStatement($request){
        $this->statement = $this->connection->prepare($request);
        return $this->statement;
    }
}



Le code PB pour lire les données en provenance du site

Code:
Global NewMap Header.s()
Header("User-Agent")   = "Application/8.4.2.1" ; set your proper secure agent
#host = "http://localhost/Your local website location/"
;#host = "https://Your distant website location/"
Procedure load()
  Structure _grid
    id.s
    id_dispached.s
    old_member.s
    new_member.s
  EndStructure

  Protected NewList myGrid._grid()
  #JSON = 0

  Protected Url.s = #host+"getEditGrid.php"

  Protected http = HTTPRequest(#PB_HTTP_Get, Url, "", 0, Header())
  If http
    Protected json.s = HTTPInfo(http,#PB_HTTP_Response)
    FinishHTTP(http)
    If json <> "ERROR"
      Debug json
      If ParseJSON(#JSON,json)
        ExtractJSONList(JSONValue(#JSON),myGrid())
      EndIf
      ForEach myGrid()
        Debug myGrid()\id
        Debug myGrid()\id_dispached
      Next
    EndIf
  Else
    MessageRequester("HTTP Error",HTTPInfo(Result, #PB_HTTP_ErrorMessage),#PB_MessageRequester_Error)
  EndIf
EndProcedure

load()




Voila j'espère que Falsam ne m'en voudra pas pour ce petit ajout.

_________________
Windows 10 64 bits PB: 5.70 ; 5.71 beta 2


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: HTTPRequest() Envoyer des données à un script Php
MessagePosté: Ven 23/Aoû/2019 11:49 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8750
Attention tout de même aux infos que vous faites transiter. L'user agent n'est pas un gage de sécurité. Très facile à changer sur un navigateur.
Je dis ça pour les données perso/rgpd tout ça..

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 10 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye