Go Down

Topic: faire un GET/POST sur un site web avec EtherCard (Read 594 times) previous topic - next topic

soussous

Bonjour,
  je dois me connecter à un site (http://192.168.1.1/Dom/MAJ.php) avec un shield enc28j60
j'ai trouvé la librairie EtherCard qui fonctionne bien pour se connecter à un site. mais lorsque je met des GET, cela me retourne une page 404. sauriez vous de quoi ça peut venir?
   Je vous met le code ci dessous (cela peut en aider d'autre)..
Code: [Select]

#include <EtherCard.h>
static byte mymac[] = { 0xDA,0xDA,0xD0,0xD0,0x00,0x1 };

byte Ethernet::buffer[700];
static uint32_t timer;

//Callback
static void my_callback (byte status, word off, word len) {
  Serial.println(">>>");
  Ethernet::buffer[off+300] = 0;
  Serial.print((const char*) Ethernet::buffer + off);
  Serial.println("...");
}
void setup () {
  Serial.begin(9600);
  Serial.println("\n[webClient]");

  if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0)
    Serial.println(F("Failed to access Ethernet controller"));
  if (!ether.dhcpSetup())
    Serial.println(F("DHCP failed"));

  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip); 
  ether.printIp("DNS: ", ether.dnsip); 

  char websiteIP[] = "192.168.1.1";
  ether.parseIp(ether.hisip, websiteIP);
  ether.printIp("SRV: ", ether.hisip);
}

void loop () {
  ether.packetLoop(ether.packetReceive());
 
  if (millis() > timer) {
    timer = millis() + 5000;
    Serial.println();
    ether.browseUrl(PSTR("/Dom/MAJ.php?"), "get=Hello", "192.168.1.1", my_callback);
  }
}



J'ai bien un retour si à la dernière ligne je met :
Code: [Select]
ether.browseUrl(PSTR("/Dom/MAJ.php?"), "", "192.168.1.1", my_callback);

et biensure dans un navigateur :
Code: [Select]
http://192.168.1.1/Dom/MAJ.php?a=b
fonctionne très bien.

Si quelqu'un à une idée. Je serai preneur.
Merci d'avance

infobarquee

bonjour,
teste ca

Code: [Select]
ether.browseUrl(PSTR("/Dom/MAJ.php?get="), "Hello", "192.168.1.1", my_callback);

en partant du principe que la variable s'appelle get, ce qui n'est pas une bonne idée
AUCUNE AIDE PAR MP

soussous

Merci beaucoup, ça fonctionne, mais pas juste en changeant cette ligne.


Je deviens fou avec les erreurs 400 et je ne comprend pas pourquoi.
Je vais afficher mon code modifié (ça pourra toujours en aider certains).
Mais dès que je touche certaines choses, j'ai des erreurs 400. En premier, voici mon code:
Code: [Select]

#include <EtherCard.h>
//Adresse MAC
static byte mymac[] = { 0xDA,0xDA,0xD0,0xD0,0x00,0x1 };

byte Ethernet::buffer[700];
static uint32_t timer;

// retour du client
static void my_callback (byte status, word off, word len) {
  Ethernet::buffer[off+300] = 0;
  Serial.println("Contenu HTML");
  String tout = (const char*) Ethernet::buffer + off;
  Serial.println(tout);
}

void setup () {
  Serial.begin(9600);
  //On prépare la carte
  Serial.println("\n[webClient]"); //A afficher sinon on a un bad request
  if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0)
    Serial.println(F("Failed to access Ethernet controller"));
  if (!ether.dhcpSetup())
    Serial.println(F("DHCP failed"));
  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip); 
  ether.printIp("DNS: ", ether.dnsip); 
  char websiteIP[] = "192.168.1.1";
  ether.parseIp(ether.hisip, websiteIP);
  ether.printIp("SRV: ", ether.hisip);
 
}

void loop () {
  ether.packetLoop(ether.packetReceive());
 
  if (millis() > timer) {
    timer = millis() + 15000;
    Serial.println();
    ether.browseUrl(PSTR("/Domotique/Arduino?a="), "Hello", "192.168.1.1", my_callback);
  }
}


J'ai un retour en erreur 400 si:
- je change les println pour le traduire en français
- comme noté dans le code : je dois laisser le "Serial.println("\n[webClient]");"
- j'ai voulu récupérer dans ma callback le message de retour pour le traiter mais la commande  "int pos=tout.indexOf("ip");" après le "Serial.println(tout);" bien que la commande soit déjà revenu, me donne une erreur 400 du serveur

Auriez vous une idée?

infobarquee

Quote
Explications de l'erreur 400, Mauvaise requête
La requête HTTP n'a pas pu être comprise par le serveur en raison d'une syntaxe erronée. Le problème peut provenir d'un navigateur web trop récent ou d'un serveur HTTP trop ancien.
dans ta requete
Code: [Select]
/Domotique/Arduino?a=
A quoi correspond Arduino?
une requête appelle un fichier html/php (je passe le Js)

donc, a voir les logs sur le server pour comprendre l'erreur 400
AUCUNE AIDE PAR MP

Go Up