Problème requette HTTP[Résolu]

Bonjour,

Je veux récupérer dans un prog php tournant sur WAMPSERVER sur mon réseau local, une varible envoyée par mon SHIELD ETHERNET. Le serveur tourne sous WIN7 Pro.
Au vu des nombreux ex sur le net, ça parait simple sauf que je n’y arrive pas!!
Sur la console de l’Arduino j’obtiens toujours le message : CONNEXION OK, ce qui veut dire qu’il s’est connecté au serveur.
Par contre sur ma page PHP j’obtiens toujours le message : NO CONNECT et le print_r($_GET) me donne Array().
J’ai essayé plusieurs sketch sur l’Arduino, j’obtiens toujours le même résultat. Ou je fais une grosse boulette ou bien ub Pb de config du serveur ?? Le port 80 est ouvert sur la Livebox vers l’IP du serveur.
Merci de votre aide.

Voici mon code Arduino:

#include <Ethernet.h>  // gestion ethernet
#include <SPI.h>  // gestion bus SPI
#include<EthernetUdp.h>  //  gestion UDP
byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0xEA, 0xF9};  // adresse Mac du module ethernet
byte ip[] = {192,168,1,40};  // adresse IP du module ethernet
byte gw[] = {192,168,1,1};  //  Ip de la box
byte subnet[] = {255,255,255,0};  //  Masque de sous reseau 
char notifierHostname[] = "192.168.1.30";  // adresse du serveur sur lequel est le prog PHP
byte serverIP[] = {192,168,1,30};
char notifierPath[] = "/pagemeteo.php?varetat=";
unsigned int portserveur=80;
unsigned int localport=8888;
EthernetClient client;
String trame=" ";

void setup()
  {
    Serial.begin(9600);   
    Ethernet.begin(mac,ip);      
  }  
    
void loop()
  {      
        delay (10000);
        senddata(notifierHostname, notifierPath);             
   }   
 
void senddata(char* host, char* path)
  {      
    trame = "TEST";
    if(client.connect(host, 80));
      {
        Serial.print("CONNEXION OK ..............................");  
          client.println("GET " + (String)path + trame + " HTTP/1.1");                                 
          client.println("Host: " + (String)host);
          client.println("Connection: close");
          client.println(); // Fin du HTTP header (ligne vide)
      }
     client.stop();    
  }

Voici mon code PHP :

<HTML>                                                              
  <HEAD>               
    <TITLE> Affichage des données</TITLE>                                                           
  </HEAD>                                                          
  <BODY> 
<?php
print_r($_GET);
if (isset($_GET['varetat']))
	{
		$connection ="CONNECT .....................";
	}
else
	{	
		$connection ="NO CONNECT !!!!!!!!!!!!!!!!!!";
	}	
	ECHO $connection;
?>                                                                    
  </BODY>
</HTML>

bonjour,
il sort d'ou ce path?
normal qu'il te renvoie ca, il récupère pas le $_GET['varetat']
essaye déjà un truc plus simple

 void loop()
{
  if (client.connect(serverIP, 80)>0) {
    Serial.print("connected... ");
    client.println("GET /pagemeteo.php?varetat=666 HTTP/1.1");
    client.println();
  } else {
    Serial.println("connection failed");
  }

Bonjour,

Merci de ta réponse.
La console Arduino me réponds bien " Connected" mais la page PHP affiche toujours : Array ( ) NO CONNECT !!!!!!!!!!!!!!!!!!

Si je tape dans la barre du naviguateur d'un des PC du reseau : http://192.168.1.30/pagemeteo.php?varetat=666, j'obtiens bien Array([varetat]=>666) CONNECT...................

tu as regardé les logs de ton server?
ca donne quoi sur les requêtes?

Les logs :

access Apache log error :
[Thu Nov 28 13:51:23.881875 2013] [core:error] [pid 4648:tid 1464] [client 192.168.1.40:1049] AH00126: Invalid URI in request Connection: close
Access log apache :
192.168.1.40 - - [29/Nov/2013:00:55:09 +0100] "GET /pagemeteo.php?varetat=666 HTTP/1.1" 400 226

remplace
HTTP/1.1
par
HTTP/1.0

Malheureusement même résultat !!

donne ton code avec les modifs pour voir, il doit bugger quelque part.

Le code PHP n’a pas changé.
Le code Arduino :

#include <Ethernet.h>  // gestion ethernet
#include <SPI.h>  // gestion bus SPI
#include<EthernetUdp.h>  //  gestion UDP
byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0xEA, 0xF9};  // adresse Mac du module ethernet
byte ip[] = {192,168,1,40};  // adresse IP du module ethernet
byte gw[] = {192,168,1,1};  //  Ip de la box
byte subnet[] = {255,255,255,0};  //  Masque de sous reseau 
char notifierHostname[] = "192.168.1.30";  // adresse du serveur sur lequel est le prog PHP
byte serverIP[] = {192,168,1,30};
char notifierPath[] = "/pagemeteo.php?varetat=";
unsigned int portserveur=80;
unsigned int localport=8888;
EthernetClient client;
String trame=" ";

void setup()
  {
    Serial.begin(9600);   
    Ethernet.begin(mac,ip,gw,subnet);      
  }  
    
void loop()
  {      
        delay (10000);
        senddata();    
   }   
 
void senddata()
    {      
       trame = "TEST";
       if (client.connect(serverIP, 80)>0)
         {
           Serial.print("connected... ");
           client.println("GET /pagemeteo.php?varetat=666 HTTP/1.0");
           client.println();
         }
      else
        {
          Serial.println("connection failed");
        }
     client.stop();    
  }

J' étais pensais que le Pb pouvait venir de WAMPSERVER.
Pour lever le doute, j'ai désinstallé WAMPSERVER et j'ai installé EASYPHP.
J'ai refais le test et là le même résultat !!!

Je ne comprends vraiment pas pourquoi ça ne fonctionne pas.

je suppose que tu as une livebox et que ton ip arduino est dans la plage dhcp.
essaye ceci est clarifiant ton script

#include <Ethernet.h>  // gestion ethernet
#include <SPI.h>  // gestion bus SPI
#include<EthernetUdp.h>  //  gestion UDP

byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0xEA, 0xF9};  // adresse Mac du module ethernet
byte ip[] = {192,168,1,5};  // adresse IP du module ethernet
byte serverIP[] = {192,168,1,30};

unsigned char gw[] = {192,168,1,1};  //  Ip de la box
unsigned char subnet[] = {255,255,255,0};  //  Masque de sous reseau 

Client client(serverIP, 80);

String trame=" ";

void setup()
  {
    Serial.begin(9600);   
    Ethernet.begin(mac,ip,gw,subnet);      
  }  
    
void loop()
  {      
        delay (10000);
        senddata();    

  if (Client.available()) {
    char c = Client.read();
    Serial.print(c);
  }


  if (!Client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // do nothing forevermore:
    for(;;)
      ;
  }
   }   
 
void senddata()
    {      
       trame = "TEST";
       if (Client.connect())
         {
           Serial.print("connected... ");
           client.println("GET /pagemeteo.php?varetat=666 HTTP/1.0");
           client.println();
         }
      else
        {
          Serial.println("connection failed");
        }
     client.stop();    
  }

	Report to moderator   Logged

Alors résultat :
L'Arduino ne se connecte qu'une fois au démarrage.
La console affiche :
connected...
disconnecting.
Du côté PHP c'est la même chose.
J'ai une livebox 2 SAGEM. L'arduino est en dehors du DHCP, le DHCP de 1 à 20. La version Arduino 1.0.5
Il y a un an ou deux, j'avais fait une appli pour afficher sur le Web l'état de 5 relais, je n'avis pas eu de problème particulier pour la faire tourner.
A l'époque, la Box était une Box SFR et le serveur tournait sous XP Pro, y aurait il un Pb de compatibilité ?

alors on va modifier un peu et tu vas mettre la DMZ sur ton server le temps des tests, après tu vire par sécurité

#include <Ethernet.h>  // gestion ethernet
#include <SPI.h>  // gestion bus SPI
#include<EthernetUdp.h>  //  gestion UDP

byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0xEA, 0xF9};  // adresse Mac du module ethernet
byte ip[] = {192,168,1,50};  // adresse IP du module ethernet
byte serverIP[] = {192,168,1,30};

unsigned char gw[] = {192,168,1,1};  //  Ip de la box
unsigned char subnet[] = {255,255,255,0};  //  Masque de sous reseau 

Client client(serverIP, 80);

void setup()
  {
    Serial.begin(9600);   
    Ethernet.begin(mac,ip,gw,subnet);      
  }  
    
void loop()
  {      
        delay (10000);
        senddata();    

  if (Client.available()) {
    char c = Client.read();
    Serial.print(c);
  }


  if (!Client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    Client.stop();
  }
   }   
 
void senddata()
    {      
       if (Client.connect())
         {
           Serial.print("connected... ");
           Client.println("GET /pagemeteo.php?varetat=666 \r\n");
           Client.println();
         }
      else
        {
          Serial.println("connection failed");
        }
     Client.stop();    
  }

L'IP du serveur est déjà en DMZ.
Avec les modifs que tu as faites, l'Arduino connecte et deconnecte de façon continue, mais toujours pas de résultat côté PHP.

teste ca
tu n’as pas l’urlrewrite ativé ou un htacces?

#include <Ethernet.h>  // gestion ethernet
#include <SPI.h>  // gestion bus SPI
#include<EthernetUdp.h>  //  gestion UDP

byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0xEA, 0xF9};  // adresse Mac du module ethernet
byte ip[] = {192,168,1,50};  // adresse IP du module ethernet
byte serverIP[] = {192,168,1,30};

unsigned char gw[] = {192,168,1,1};  //  Ip de la box
unsigned char subnet[] = {255,255,255,0};  //  Masque de sous reseau 

Client client(serverIP, 80);

void setup()
  {
    Serial.begin(9600);   
    Ethernet.begin(mac,ip,gw,subnet);      
  }  
    
void loop()
  {      
        delay (10000);
        senddata();    

   }   
 
void senddata()
    {      
       if (Client.connect() && Client.available() )
         {
           Serial.print("connected... ");
           Client.println("GET /pagemeteo.php?varetat=666 \r\n");
           char c = Client.read();
           Serial.print(c);
           Client.println();
 
         }
      else
        {
          Serial.println("connection failed");
        }
     Client.stop();    
  }

Sur la console : connected environ toutes les 10s

Sur Apache access log :
192.168.1.50 - - [30/Nov/2013:16:39:33 +0100] "GET /pagemeteo.php?varetat=666 " 200 426

Au niveau resultat PHP la même chose... C'est désespérant !! =(

200 ca veut dire que ca arrive bien sur la bonne page :wink:
dans ton php tu vas mettre ca en créant un fichier test.txt et chmod 777

<?php

if (isset($_GET['varetat']))
	{
          $varetat = $_GET['varetat'];
         $fichier = "test.txt";
          fopen ($fichier, a+);
         fput ($fichier, $varetat."\n");
        fclose($fichier);

	}
?>

au moins tu sauras si le GET arrive bien

Je retrouve bien mes 666 dans le fichier texte à chaque connexion.

donc ca fonctionne :wink:
modifie ton php.ini pour être moins restrictif ou rajoute un header dans ta requete.
je te laisse chercher un peu pour ca :wink:

OK, je fouille plusieurs pistes sans résultat concluant pour l'instant.

En tout cas, merci beaucoup, Infobarquee pour l'aide apportée.