从Arduino以太网客户端Get中删除标头信息

Removing Header information from an Arduino Ethernet Client Get

本文关键字:删除 信息 Get Arduino 以太网 客户端      更新时间:2023-10-16

我想知道这是否有我遗漏的技巧。

在arduino上,你这样从网络服务中获取:

if (client.connect("google.com", 80)) {
client.println("GET /service/v2/time HTTP/1.1");
client.println("Host:nimbits-02.appspot.com");   
client.println();
delay(1000);
while(client.connected() && !client.available()) delay(1); 
while (client.available()) {
  c = client.read();
  Serial.print(c);
}
client.stop();
client.flush();

}

工作非常好(调用nimbits时间服务)

这个调用的内容主体是我需要的,打印结果如上所述给我:

> HTTP/1.1 200 OK Date: Sat, 02 Feb 2013 17:24:38 GMT Content-Type:
> text/html Server: Google Frontend Content-Length: 13
> 
> 1359825878036

一切都很好,但我必须在arduino上进行一些昂贵的字符串处理才能获得消息正文。我只想要13598225878036。有没有办法告诉以太网客户端不要读取标头?那会很方便。

到目前为止,我最好的解决方案是假设消息正文总是在最后一个新行字符之后,这似乎很容易出错:

if (client.connect("google.com", 80)) {
      client.println("GET /service/v2/time HTTP/1.1");
      client.println("Host:nimbits-02.appspot.com");   
      client.println();
      delay(1000);
      while(client.connected() && !client.available()) delay(1); 
      while (client.available()) {
        c = client.read();
        response= response + c;
      }
     int contentBodyIndex = response.lastIndexOf('n');
     if (contentBodyIndex > 0) {
        Serial.print(response.substring(contentBodyIndex));
     }
      client.stop();
      client.flush();
    }

谢谢,Ben-nimbits.com

它们是一个键。收割台以双CRLF:结束

Response = Status-Line
    *(( general-header        
   | response-header        
   | entity-header ) CRLF)  
   CRLF
   [ message-body ]   

请参阅W3文档