title: How can I make my Arduino read only a specific character from a Web Server?
body: <p>I have just started with Web Programming &amp; Arduino. I am trying to learn how an Arduino communicates with a Web Server. </p>
  
  <p>I have this Arduino UNO that communicates with my <a href="http://boat.esy.es" rel="nofollow">Web Server</a> via the <strong>SimComm SIM808 GSM-GPRS</strong> module. I have a file called <strong>retrieve.php</strong> on my Web Server that basically fetches data from a database &amp; delivers them to whoever makes a request.</p>
  
  <p>My Arduino program is reading the file, but it's reading more than it should.</p>
  
  <p><strong>retrieve.php</strong> echos two values 1 &amp; 1. You can have a look at it <a href="http://boat.esy.es/retrieve.php" rel="nofollow">here</a></p>
  
  <p>Problem is when I make my Arduino call this file, it reads everything &amp; this is what I end up getting</p>
  
  <pre><code>GSM Shield testing.
  
  status=READY
  status=ATTACHED
  
  100.107.219.185
  H
  Number of data received:
  1
  
  Data received:
  H
  TTP/1.1 200 OK
  Date: Sat, 04 Jun 2016 13:07:05 GMT
  Server: Apache
  X-Powered-By: PHP/5.5.35
  Content-Length: 2
  Connection: close
  Content-Type: text/html
  
  11
  CLOSED
  </code></pre>
  
  <p>My <strong>Arduino</strong> code is given below:-</p>
  
  <pre><code>#include "SIM900.h"
  #include &lt;SoftwareSerial.h&gt;
  #include "inetGSM.h"
  //#include "sms.h"
  //#include "call.h"
  
  //To change pins for Software Serial, use the two lines in GSM.cpp.
  
  //GSM Shield for Arduino
  //www.open-electronics.org
  //this code is based on the example of Arduino Labs.
  
  //Simple sketch to start a connection as client.
  
  InetGSM inet;
  //CallGSM call;
  //SMSGSM sms;
  
  char msg[50];
  int numdata;
  char inSerial[50];
  int i=0;
  boolean started=false;
  
  void setup()
  {
       //Serial connection.
       Serial.begin(9600);
       Serial.println("GSM Shield testing.");
       //Start configuration of shield with baudrate.
       //For http uses is raccomanded to use 4800 or slower.
       if (gsm.begin(2400)) {
            Serial.println("\nstatus=READY");
            started=true;
       } else Serial.println("\nstatus=IDLE");
  
       if(started) {
            //GPRS attach, put in order APN, username and password.
            //If no needed auth let them blank.
            if (inet.attachGPRS("TATA.DOCOMO.INTERNET", "", ""))
                 Serial.println("status=ATTACHED");
            else Serial.println("status=ERROR");
            delay(1000);
  
            //Read IP address.
            gsm.SimpleWriteln("AT+CIFSR");
            delay(5000);
            //Read until serial buffer is empty.
            gsm.WhileSimpleRead();
  
            //TCP Client GET, send a GET request to the server and
            //save the reply.
            numdata=inet.httpGET("www.boat.esy.es", 80, "/retrieve.php", msg, 1);
            //Print the results.
            Serial.println("\nNumber of data received:");
            Serial.println(numdata);
            Serial.println("\nData received:");
            //Serial.println(msg);
  
            char* content = strstr(msg,"\r\n\r\n");
            content = content+4;
            Serial.println(content);
       }
  };
  
  void loop()
  {
       //Read for new byte on serial hardware,
       //and write them on NewSoftSerial.
       serialhwread();
       //Read for new byte on NewSoftSerial.
       serialswread();
  };
  
  void serialhwread()
  {
       i=0;
       if (Serial.available() &gt; 0) {
            while (Serial.available() &gt; 0) {
                 inSerial[i]=(Serial.read());
                 delay(10);
                 i++;
            }
  
            inSerial[i]='\0';
            if(!strcmp(inSerial,"/END")) {
                 Serial.println("_");
                 inSerial[0]=0x1a;
                 inSerial[1]='\0';
                 gsm.SimpleWriteln(inSerial);
            }
            //Send a saved AT command using serial port.
            if(!strcmp(inSerial,"TEST")) {
                 Serial.println("SIGNAL QUALITY");
                 gsm.SimpleWriteln("AT+CSQ");
            }
            //Read last message saved.
            if(!strcmp(inSerial,"MSG")) {
                 Serial.println(msg);
            } else {
                 Serial.println(inSerial);
                 gsm.SimpleWriteln(inSerial);
            }
            inSerial[0]='\0';
       }
  }
  
  void serialswread()
  {
       gsm.SimpleRead();
  }
  </code></pre>
  
  <p>And this is my <strong>PHP</strong> code</p>
  
  <pre><code>&lt;?php 
  
      $server = "mysql.hostinger.in";
      $user = "xxxxxxxxxx";
      $password = "xxxxxx";
      $db = "xxxxxxx";
  
      $lck;
      $ign;
  
      $conn = mysqli_connect($server,$user,$password,$db);
  
      if($conn-&gt;connect_error)
      {
          die("Connection Failed:" . $conn-&gt;connect_error);
      }
  
      $query = "SELECT unlck_lck, ignition FROM BOATOP";
      $res = $conn-&gt;query($query);
  
      if($res-&gt;num_rows&gt;0)
      {
          $row = $res-&gt;fetch_assoc();
          $lck = $row["unlck_lck"];
          $ign = $row["ignition"];
  
          echo $lck;
          echo $ign;
      }
  
      mysqli_close($conn);
  
  
  ?&gt;
  </code></pre>
  
  <p>I want my Arduino to read only the output echoed by my PHP file. But currently it's reading everything. </p>
  
  <p>And I also need to mention one thing here. For my Arduino GSM Shield, I haven't used the examples or libraries that come with the Arduino installation pack since the libraries weren't compatible with my GSM Shield. Instead, I have used some libraries I found online. I didn't post those files here because they would make my post really long. Please let me know if you need to have a look at them as well. </p>
  
  <p><strong>UPDATE 1</strong> </p>
  
  <p>Content showing null</p>
  
  <p>Arduino modification</p>
  
  <pre><code>content = strstr(msg,"\r\n\r\n");
  if(content == NULL) {
      Serial.println("ERROR IN CONTENT READING");
  } else {
      content = content + 4;
      Serial.println("The Content Is:");
      Serial.println(content);
  }
  </code></pre>
  
  <p>Result:</p>
  
  <pre><code>GSM Shield testing.
  
  status=READY
  status=ATTACHED
  
  100.110.244.218
  
  Number of data received:
  50
  
  Data received:
  
  ERROR IN CONTENT READING
  HTTP/1.1 200 OK
  Date: Sat, 04 Jun 2016 17:17:12 GMT
  Server: Apache
  X-Powered-By: PHP/5.5.35
  Content-Length: 2
  Connection: close
  Content-Type: text/html
  
  11
  CLOSED
  </code></pre>