Go Down

Topic: Problem with GET response (Read 673 times) previous topic - next topic

Da_Beast

May 03, 2013, 05:40 pm Last Edit: May 03, 2013, 06:35 pm by Da_Beast Reason: 1
Hi, I'm having some problems with the response from a GET operation.

The problem is that when I read the console, the GET is sort of preformed twice. The first time it's ok. But the second time the values are gone.

The console response:
first time the client connects -> site requesting the values
the second time -> site posting values
I think the site is requesting values, then posting new one's and then requesting them again. Is there a way I can "remember" the item & value from the post?

Code: [Select]
server is at 192.168.1.177
GET /verlichting HTTP/1.0

Test =0
Request= lights
Item=
Value =


Test =0
Request= lights
Item=
Value =
{room1="0"}{room2="0"}{room3="0"}{room4="0"}
client disonnected

GET /lights/?values=/{room1="0"}{room2="0"}{room3="0"}{room4="0"} HTTP/1.0

Test =1
Request= lights
Item= ?values=
Value = {room1="0"}{room2="0"}{room3="0"}{room4="0"}


Test =0
Request= lights
Item=
Value =
{room1="0"}{room2="0"}{room3="0"}{room4="0"}
client disonnected

GET /lights HTTP/1.0

Request= lights
Item=
Value =


Request= lights
Item=
Value =
{room1="0"}{room2="0"}{room3="0"}{room4="0"}
client disonnected


The code:
Code: [Select]
while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
       
        if(c != '\n' && c != '\r' && index < 255){ // Reads until either an eol character is reached or the buffer is full
          clientline[index++] = c;
          continue;
        }
        String urlString = String(clientline);
        //  extract the operation
        String op = urlString.substring(0,urlString.indexOf(' '));
        //  we're only interested in the first part...
        urlString = urlString.substring(urlString.indexOf('/'), urlString.indexOf(' ', urlString.indexOf('/')));
        urlString.toCharArray(clientline, 255);
        Serial.println();
        char *i;
        char *request = strtok_r(clientline,"/", &i);
        char *item = strtok_r(NULL, "/", &i);
        char *value = strtok_r(NULL, "/", &i);
           
        Serial.print("Request= "); Serial.println(request);
        Serial.print("Item= "); Serial.println(item);
        Serial.print("Value = "); Serial.println(value);       
       
// if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connnection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // add a meta refresh tag, so the browser pulls again every 5 seconds:
          //client.println("<meta http-equiv=\"refresh\" content=\"5\">");
         
          String restBegin = "{";
          String restEnd = "\"}";
          String restResponse = String();
         
          if (strcmp(request, "heating")==0){
            client.println("<br/>");
            String restHeating = "recived heating request";
            restResponse = restBegin + restHeating + restEnd;
            Serial.println(restResponse);
            client.println(restResponse);
                       
            client.println("<br />");
            client.println("</html>");
          }
         
          if (strcmp(request, "lights")==0){
            if (strcmp(item, NULL)==0){           
            client.println("<br/>");
           // Building a REST response   
            String restRoom1 = "room1=\""; String restRoom2 = "room2=\"";
            String restRoom3 = "room3=\""; String restRoom4 = "room4=\"";
            restResponse = restBegin + restRoom1 + room1[4] + restEnd;
            restResponse += restBegin + restRoom2 + room2[4] + restEnd;
            restResponse += restBegin + restRoom3 + room3[4] + restEnd;
            restResponse += restBegin + restRoom4 + room[4] + restEnd;
            Serial.println(restResponse);
            client.println(restResponse);
               
            client.println("<br />");
            client.println("</html>");
            }
            if (strcmp(item, "?values=")){
              Serial.print("Values entering console: "); Serial.println(value);
            }
          }
         
          else {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html");
            client.println();
          }
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
    Serial.println();

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