Go Down

Topic: Ayuda con GET en web server (Read 740 times) previous topic - next topic

Maverik

Hola gente del foto aki nuevamente molestando..

tengo mi server con arduino como el ejemplo del playground
http://arduino.cc/playground/Code/WebServer

quiero pasarle unos parámetros con GET
exactamente esto es lo que le paso:
<form method=get name=acc8><input type=hidden name=acc8 value=ON><input type=submit value=ON></form>

lo que quiero es poder leer cuando le paso ese parámetro para actuar en base a eso..
no se si se entiende.. pero como puedo hacer eso..

curro92

Hola,
en el foro antiguo tienes este tema Parse incoming HTTP GET data
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1288750919




Maverik

ok gracias curro92, pero el mayor problema es donde poner el codigo..

Code: [Select]

Server server(80);


void setup()
{
 Ethernet.begin(mac, ip);
 server.begin();
pinMode(ledPin, OUTPUT);  
 Serial.begin(9600); // DEBUG
}

/*************************************************************************************************************************************************
*                                                           Main loop
*************************************************************************************************************************************************/

void loop()
{
 Client client = server.available();
 if (client)
 { // now client is connected to arduino

  // read HTTP header request... so select what page client are looking for
   HTTP_DEF http_def = readHTTPRequest(client);

   if (http_def.pages > 0)
   {
     sendPage(client,http_def);
   }
   else
   {
     contentPrinter(client,(char*)pgm_read_word(&(page_404[0])));
    }
      }

   // give the web browser time to receive the data
   delay(1);
   client.stop();
 }

}

/*************************************************************************************************************************************************
*                                              Method for read HTTP Header Request from web client
*************************************************************************************************************************************************/
struct HTTP_DEF readHTTPRequest(Client client)
{
 char c;
 int i;

 // use buffer, pay attenction!
 int bufindex = 0; // reset buffer
 int loadindex = 0; // reset load

 int contentLenght = 0; // reset POST content lenght
 char compare[50]; // page comparation (uri selection)

 HTTP_DEF http_def; // use the structure for multiple returns

 http_def.pages = 0; // default page selection... error

 // reading all rows of header
 if (client.connected() && client.available())
 { // read a row
   buffer[0] = client.read();
   buffer[1] = client.read();
   bufindex = 2;
   // read the first line to determinate the request page
   while (buffer[bufindex-2] != '\r' && buffer[bufindex-1] != '\n')
   { // read full row and save it in buffer
     c = client.read();
     if (bufindex<STRING_BUFFER_SIZE) buffer[bufindex] = c;
     bufindex++;
   }

   // select the page from the buffer (GET and POST) [start]
   for(i = 0; i < NUM_PAGES; i++)
   {
     strcpy_P(load, (char*)pgm_read_word(&(http_uris[i])));
     // GET
     strcpy(compare,"GET ");
     strcat(compare,load);
     strcat(compare," ");
     Serial.print("GET compare: "); // DEBUG
     Serial.println(compare); // DEBUG
     if (strncmp(buffer,compare, strlen(load)+5)==0)
     {
       http_def.pages = i+1;
       break;
     }

     // POST
     strcpy(compare,"POST ");
     strcat(compare,load);
     strcat(compare," ");
     Serial.print("POST compare: "); // DEBUG
     Serial.println(compare); // DEBUG
     if (strncmp(buffer,compare, strlen(load)+6)==0)
     {
       http_def.pages = i+1;
       break;
     }

   }
   // select the page from the buffer (GET and POST) [stop]

   // read other stuff (for POST requests) [start]
   if (strncmp(buffer, "POST /", 5)==0)
   {
     processRequest:
     loadindex = 2; // reset load

     memset(load,0,STRING_LOAD_SIZE);
     load[0] = client.read();
     load[1] = client.read();
     while (load[loadindex-2] != '\r' && load[loadindex-1] != '\n')
     {
       c = client.read();
       if (loadindex<STRING_BUFFER_SIZE) load[loadindex] = c;
       loadindex++;
     }
     if (strncmp(load, "Content-Length: ",16)==0)
     {
       loadindex = 16;
       for(i = loadindex; i< strlen(load) ; i++)
       {
         if (load[i] != ' ' && load[i] != '\r' && load[i] != '\n')
         {
           vars[i-loadindex] = load[i];
         }
         else
         {
           break;
         }
       }

       contentLenght = atoi(vars);
       memset(vars,0,STRING_VARS_SIZE);
       client.read(); client.read(); // read null line
       i = 0;
       while (i<contentLenght)
       {
         c = client.read();
         vars[i] = c;
         ++i;
       }

     }
     else
     {
      goto processRequest;
     }
   }
   // read other stuff (for POST requests) [stop]


   // clean buffer for next row
   bufindex = 0;
 }

//      delay(10); // removing this nothing work... if you understand why mail me a bebbo [at] bebbo [dot] it
 Serial.print("Grepped page: "); // DEBUG
 Serial.println(http_def.pages); // DEBUG

 strncpy(http_def.vars,vars,STRING_VARS_SIZE);

 return http_def;
}




ese es el código q tengo..
y le tengo q agregar este

Code: [Select]
Client client = server.available();
 if (client)
 {
   while(client.connected())
   {
     if(client.available())
     {
       char c = client.read();
       if(readString.length() < 100)
       {
         readString.append(c);
       }
       if(c == '\n')
       {

         if(readString.contains("acc1=ON"))
         {
           digitalWrite(Acc1, HIGH);
         }
         if(readString.contains("acc1=OFF"))
         {
           digitalWrite(Acc1, LOW);
         }



el problema es q si lo agrego en el void loop()
no me carga la pagina, no se q es lo que estoy haciendo mal  :~

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy