Explication methode Get

Bonjour, je me présente OLIVIER 31 ans passionné d'informatique, Rouen

j''essaye depuis 3 jours de comprendre comment la méthode "Get" fonctionne, car en effet je n'arrive pas a la faire fonctionner.

Alors certes de nombreux exemples existent sur le net, mais je ne trouve rien de simple me permettant la compréhension de la chose.
( je suis pour rappel débutant ).

je commence par mettre mon code Arduino :

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0xF9, 0x93 }; 
byte ip[] = { 192, 168, 1, 177 }; 
byte myserver[] = { 192, 168, 1, 150 }; 
EthernetClient client;

void setup(){

  Ethernet.begin(mac, ip);
  //Ethernet.begin(mac, ip, subnet, gateway);
  Serial.begin(115200); 
 
}

void loop(){
  
      sendGET(); 
 
} 

//////////////////////////

void sendGET() 
{
  if (client.connect(myserver, 80)) {  
    Serial.println("connected");
    client.println("GET /?code=10 HTML 1.0 ");
    client.println(); 

  } 
  else {
    Serial.println("connection failed"); 
    Serial.println();
  }

  Serial.println();
  Serial.println("disconnecting.");
  Serial.println("==================");
  Serial.println();
  client.stop(); //stop client

}

mon code Php :

$code='Ko';
if (isset ($_get["code"])){
    $code = $_get["code"];
}
echo $code;

1-sur mon moniteur série j'ai en réponse 15 seconde apres le chargement de ma page Php

connection failed

disconnecting.

connected

disconnecting.

connected

disconnecting.

15 secondes cela me semble long surtout pour passer une variable.

2- sur ma page Php la variable $code fait apparait instantanément "KO", le code ne part pas en Get .
voici le fichier access.log de mon serveur apache

192.168.1.177 - - [18/Sep/2013:15:14:33 +0200] "GET /index.php?code=10 HTML 1.0 " 403 211
192.168.1.177 - - [18/Sep/2013:15:14:33 +0200] "GET /index.php?code=10 HTML 1.0 " 403 211
192.168.1.177 - - [18/Sep/2013:15:14:33 +0200] "GET /index.php?code=10 HTML 1.0 " 403 211
192.168.1.177 - - [18/Sep/2013:15:14:33 +0200] "GET /index.php?code=10 HTML 1.0 " 403 211
192.168.1.177 - - [18/Sep/2013:15:14:33 +0200] "GET /index.php?code=10 HTML 1.0 " 403 211
192.168.1.177 - - [18/Sep/2013:15:14:33 +0200] "GET /index.php?code=10 HTML 1.0 " 403 211
192.168.1.177 - - [18/Sep/2013:15:14:33 +0200] "GET /index.php?code=10 HTML 1.0 " 403 211
192.168.1.177 - - [18/Sep/2013:15:14:33 +0200] "GET /index.php?code=10 HTML 1.0 " 403 211
192.168.1.177 - - [18/Sep/2013:15:14:33 +0200] "GET /index.php?code=10 HTML 1.0 " 403 211

celui-ci du coup grossi à vu d’œil 45 Mo en 2h de connexion =(

je pense qu'il doit me manque quelques chose dans mon httpd.conf

3-Si quelqu'un a un petit tuto du débutant pour m’expliquer cela je suis preneur.

j'ai trouvé beaucoup d'exemple dans des tuto complet, mais tous trop complet et donc compliquer pour moi.

4- Merci de m'avoir lu et de m'aider.

Olivier

Essaye comme ça :

#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {  
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 
  192,168,1,177 };
byte server[] = { 192, 168, 1, 150 };

// Initialize the Ethernet client library
// with the IP address and port of the server 
// that you want to connect to (port 80 is default for HTTP):
Client client(server, 80);


void setup() {
  // start the Ethernet connection:
  Ethernet.begin(mac, ip);
  // start the serial library:
  Serial.begin(9600);
  // give the Ethernet shield a second to initialize:
  delay(1000);
  // Serial.println("connecting...");

  // if you get a connection, report back via serial:

}

 void loop(){
     Serial.println("connecting...");
  if (client.connect()) {
   // client.flush();
   // Serial.flush();
    Serial.println("connected");
    // Make a HTTP request:
    client.print("GET /?code=10");
    client.println(" HTTP/1.1");
    client.println();
    delay(2000);
  } 
  else if (!client.connected()){
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

Par contre un truc que tu ne mentionnes pas, tu veux récupérer la valeur de code dans le moniteur série ?

Merci pour votre réponse rapide, je vais tester cela des que je rentre du taf,

Non je veux récupérer code dans mon code php

mcolivia:
Non je veux récupérer code dans mon code php

Dans un premier temps d'accord.... sinon faire une requête GET n'aurait aucun sens, par contre echo $code va afficher le code à l'écran dans la fenêtre du navigateur qui fait la requête.... donc il faut que l'arduino lise la réponse et la transmette ensuite au moniteur série (à défaut de faire autre chose avec)

Bonjour,

1- j'ai donc testé votre code, ( je l'ai modifié pour ma version 1,02)
mais cela ne marche pas, me suis-je trompé ?

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0xF9, 0x93 }; 
byte ip[] = { 192, 168, 1, 177 }; 
byte myserver[] = { 192, 168, 1, 150 }; 
EthernetClient client;

void setup() {
  // start the Ethernet connection:
  Ethernet.begin(mac, ip);
  // start the serial library:
  Serial.begin(9600);
  // give the Ethernet shield a second to initialize:
  delay(1000);
  // Serial.println("connecting...");

  // if you get a connection, report back via serial:

}

 void loop(){
     Serial.println("connecting...");
  if (client.connect(myserver,80)) {
   // client.flush();
   // Serial.flush();
    Serial.println("connected");
    // Make a HTTP request:
    client.print("GET /?code=10");
    client.println(" HTTP/1.1");
    client.println();
    delay(2000);
  } 
  else if (!client.connect(myserver,80)){
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

mon moniteur série me ressort :
connecting...
connection failed
connecting...
connection failed
connecting...
connection failed

en boucle ( même lorsque qu'un client est connecté)

j'ai mon acces.log qui a changé d'erreur en revanche:

192.168.1.177 - - [19/Sep/2013:08:19:47 +0200] "GET /?code=10 HTTP/1.1" 400 226
192.168.1.177 - - [19/Sep/2013:08:20:11 +0200] "GET /?code=10 HTTP/1.1" 400 226
192.168.1.177 - - [19/Sep/2013:08:20:14 +0200] "GET /?code=10 HTTP/1.1" 400 226
192.168.1.150 - - [19/Sep/2013:08:20:28 +0200] "GET / HTTP/1.1" 200 112
192.168.1.150 - - [19/Sep/2013:08:20:45 +0200] "GET / HTTP/1.1" 200 112
192.168.1.150 - - [19/Sep/2013:08:21:19 +0200] "GET / HTTP/1.1" 200 112
192.168.1.150 - - [19/Sep/2013:08:21:22 +0200] "GET / HTTP/1.1" 200 112
192.168.1.150 - - [19/Sep/2013:08:21:23 +0200] "GET / HTTP/1.1" 200 112
192.168.1.150 - - [19/Sep/2013:08:21:24 +0200] "GET / HTTP/1.1" 200 112

-2 la page chargé par défaut sur mon serveur apache est index.php ne devrais-je pas mettre
client.print("GET /index.php?code=10");

j'ai testé mais je n'ai pas mieux
192.168.1.177 - - [19/Sep/2013:08:25:45 +0200] "GET /index.php?code=10 HTTP/1.1" 400 226

et mon site ne me donne toujours pas ma variable ;(

3- Le but final est de faire une gestion de mes volets( module blyss de chez casto => merci Skywood) par site php, actuellement j'arrive à les ouvrir et fermer avec mon interface php.
En récupérant l'information d'ouverture je pourrais Transmettre un tableau de l'état de mes volet à mon site web.

Merci pour votre aide.

après une bonne heure de recherche et de test sur le net, il semble que mon problème vienne de ma requête en elle même elle serait incorrect.

J ai trouver pourquoi il ne se connecte que une fois il me manquait un client.stop;

Me reste à comprendre comment bien rédiger mes requête get je pense ...

Bon je reprend ma recherche ce matin, personne pour me donner une piste ?

je fait du sur place monstrueux j'ai plus de cheveux ;(

je suis presque sûr que ma requête n'ai pas bonne, et que mon fichier httpd.conf est Ok.

par contre sur tous les exemples que j'ai vu sur le net tous le monde fait comme moi

 client.println("GET /fichier.php HTTP/1.1");

j’essaye d’exécuter un fichier php et j'ai une réponse 400 226 sur mon access.log

je vais bosser sa fait du bien de faire autre chose....

J'espère que quelqu’un pourra me donner un piste, car la je commence à saturer ;(

Google est ton ami: fais une recherche avec 'http rfc'
Comme ça tu verras que ta requête http est mal construite...

Il me semble qu'il y a des champs obligatoires dans l'entête...

oui vive google ...

sa fait 3 jours je suis dessus merci pour ton aide je lis cela de suite.

Merci beaucoup

Bon en fait après relecture de la doc il n'y a peut-être pas de champ obligatoire dans l'entête... Peut-être que ça dépend aussi du serveur auquel tu te connectes...

Pour voir si ta requête est correcte tu peux tenter de l'envoyer au serveur depuis ton Mac ou Pc en telnet, ça sera plus simple pour la mise au point.
Quand ça marche en telnet tu continues avec l'arduino...

Bonjour,

Tu peut redonner ta requête HTTP actuelle (j'ai lu en diagonale, voir même en horizontal) :wink:

Passe en HTTP/1.0, à moins que tu ne veuilles te connecter à un sous domaine / serveur mutualisé le HTTP/1.1 ne te sert pas à grand chose ici.
Sinon essaye de faire tes tests à la main avec une console telnet :wink:

Voila un exemple de requête HTTP GET classique + réponse (fait avec une console telnet) :

$ nc 127.0.0.1 80
GET /?toto=titi HTTP/1.0

HTTP/1.1 200 OK
Date: Fri, 20 Sep 2013 15:40:37 GMT
Server: Apache/2.4.4 (Win32) PHP/5.4.16
X-Powered-By: PHP/5.4.16
Content-Length: 9
Connection: close
Content-Type: text/html

Bonjour !

(toute les lignes se terminent par \r\n (CR+LF))

merci pour votre aide cela fonctionne

Des que je suis passer en 1.0 en 1.1 cela ne marchez pas :slight_smile:
( la requête doit être plus complexe) je clos pas tous de suite mon post je vais d'abord mettre les codes qui fonctionnent.

Skywodd merci encore, je reviens vers toi sur ton site lorsque ma gestion de volet, lampe, chaudiere ... est opérationnel si tu veux regarder voir le publier

:wink:

bonjour,
les requêtes en 1.1 demandent un header un peu plus complet, mais pas complexe.
je te renvoie sur le SDZ http://fr.openclassrooms.com/informatique/cours/les-requetes-http/les-requetes-clients

mcolivia:
si tu veux regarder voir le publier

Désolé mais je fait pas de guest-blogging :wink:

infobarquee:
je te renvoie sur le SDZ OpenClassRooms http://fr.openclassrooms.com/informatique/cours/les-requetes-http/les-requetes-clients