Envoi données à un serveur

Afin d’envoyer des données à un serveur il faut créer la requête http.

Afin de « décrypter » la requête à envoyer utilisez l’outil en ligne http://web-sniffer.net/ qui affichera l’HTTP Request Header ou l’extension Chrome « Live HTTP Headers »

Une fois récupéré les informations nécessaires (exemple pour la requête http://mon_site.com/update?contact=porte&statut=ON) :

GET /updatetable.php?contact=porte&statut=ON HTTP/1.1
Host: mon_site.com
Accept: text/html,application/xhtml+xml,application/xml
Accept-Encoding: gzip, deflate, sdch
Accept-Language: fr-FR

Utilisez l’outil http://requestmaker.com/ pour tester la requête ou la version cliente de web-sniffer.

Reportez la requête dans le code Arduino comme ci-dessous 

 /*  
 Send data to MySql Database via PHP Page  
 */  
 #include <SPI.h>  
 #include <SD.h> //-- For SD Card  
 #include <Ethernet.h>  
 //-- Contact data  
 # define inPinPoCour 24 //-- Contact Porte Cour  
 int val;        //-- Valeur du contact  
 boolean contactPoCour = false;   
 //-- Local Network Settings  
 byte mac[] = { 0x00, 0xAD, 0xBE, 0xEF, 0xFE, 0x50 }; //-- Addresse MAC   
 //-- Settings PHP Page  
 char PHPSiteAddress[] = "xxxx.com";  
 //-- Variable Setup  
 long lastConnectionTime = 0;   
 boolean lastConnected = false;  
 int failedCounter = 0;  
 //-- Initialize Arduino Ethernet Client  
 EthernetClient client;  
 void setup()  
 {//-- Start Serial for debugging on the Serial Monitor  
  Serial.begin(9600);  
  //-- Start Ethernet on Arduino  
  startEthernet();   
  delay(1000);   
 }  
 //-- Sketch test contacts  
 void loop(){  
   val = digitalRead(inPinPoCour); // read input value   
   if (val == LOW) // Contact open  
     {if (!contactPoCour) //-- If contact was closed  
       {sendserver("portail","OFF");  
       contactPoCour=true;}}  
   else // Contact open  
     {if (contactPoCour) //-- If contact was open  
       {sendserver("portail","ON");   
       contactPoCour=false;}}  
 }  
 //-- Send data to server  
 void sendserver(String contact, String statut){       
    if (client.connect(PHPSiteAddress, 80))  
  {   
   //-- Create HTTP POST Data  
   String sData = "contact="+contact+"&statut="+statut;  
   Serial.println(sData);  
   client.println("GET /updatetable.php?"+sData+" HTTP/1.1");  
   client.println("Host: xxxx.com");  
   client.print("Content-Type: application/x-www-form-urlencoded\n");  
   client.print("Content-Length: ");  
   client.print(sData.length());  
   client.print("\n\n");  
   lastConnectionTime = millis();  
   if (client.connected())  
   {  
    Serial.println("Connecting to PhpSite...");  
    Serial.println();  
    failedCounter = 0;  
   }  
   else  
   {  
    failedCounter++;  
    Serial.println("Connection to PhpSite failed ("+String(failedCounter, DEC)+")");    
    Serial.println();  
   }  
  }  
  else  
  {  
   failedCounter++;  
   Serial.println("Connection to PhpSite Failed ("+String(failedCounter, DEC)+")");    
   Serial.println();  
   lastConnectionTime = millis(); }  
   //-- Read return  
   char rc=0;  
   skipHeader();  
   while (client.connected()){  
    if (client.available()>0){  
     rc= client.read();  
     break;  
    }}  
   if (rc=='1')  
     Serial.println("Ok");  
   else  
     Serial.println("Erreur");  
   if (client.connected()) {   
     client.stop();  // DISCONNECT FROM THE SERVER  
   }  
 else  
 Serial.println("ERREUR Envoi au serveur ");   
 }  
 //-- Ignore le Header résultat  
 void skipHeader(){  
  char lc;  
  while (client.connected()){  
   if (client.available()){  
    char nc=client.read();  
    if ((lc==10) && (nc==13)){  
     while (client.available()==0);  
      client.read();  
      break;  
    }  
    else  
     lc=nc;  
   }}}  
 //-- Connexion Ethernet  
 void startEthernet()  
 {  
  client.stop();  
  Serial.println("Connecting Arduino to network...");  
  Serial.println();   
  delay(1000);  
  // Connect to network amd obtain an IP address using DHCP  
  if (Ethernet.begin(mac) == 0)  
  {  
   Serial.println("DHCP Failed, reset Arduino to try again");  
   Serial.println();  
  }  
  else  
  {  
   Serial.println("Arduino connected to network using DHCP");  
   Serial.println();  
  }   
  delay(1000);  
 }   

La page PHP est :

 <?php  
 //-- Appel pour MAJ du statut d'un contact  
 //  http://xxxx/updatetable.php?contact=porte_entree&statut=ON  
 //-- récupération du nom du contact et de son statut (par défaut ON) :  
 $contact = $_GET["contact"];   
 $statut = $_GET["statut"];  
 if (empty($contact))  
   $contact="portail"; //-- Contact par défaut "porte_entree"  
 if (empty($statut))  
   $statut="ON"; //-- Statut par défaut ON    
 //-- connection à MySql  
 $dbhost = 'sql206.byethost32.com'; //  
 $dbuser = 'b32_15751138';    //  
 $dbpass = 'chicco@6';  
 $dbbase = 'b32_15751138_arduino';   //  
 $conn = mysql_connect($dbhost, $dbuser, $dbpass);  
 if(! $conn )  
 {  
  //die('Could not connect: ' . mysql_error());  
  die('0');  
 }  
 $sql ='UPDATE contacts '.  
 'SET statut="'.$statut.'", datecontact=NOW(), timecontact=TIMESTAMPADD(MINUTE,45,UTC_TIME()) '.  
 'WHERE nom="'.$contact.'"';   
 //////////////////  
 mysql_select_db($dbbase);  
 $retval = mysql_query( $sql, $conn );  
 if(! $retval )  
 {  
  //die('Could not enter data: ' . mysql_error());  
  die('0');  
 }  
 echo "1\n";  
 //echo $contact.":".$statut;  
 mysql_close($conn);  
 ?>  

 

1 comments on “Envoi données à un serveur
  1. R hassane dit :

    Merci beaucoup pour votre générosité. Et je vous tiendrais au courant de l’évolution de mon projet.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Articles récents
Commentaires récents
fatima dans Bienvenue !
AdminDroid dans Bienvenue !
fatima dans Bienvenue !
Archives
Catégories