1

我一直在玩带有以太网屏蔽的 Arduino Uno,试图阅读网页。到目前为止,我的代码正在运行,但由于某种原因,它读取了 HTTP 正文两次,我不知道为什么。任何帮助表示赞赏。

if(client.connect(host, 80)) {

Serial.println("connecting...");

client.println("GET /arduino.php HTTP/1.1");
client.println("Host: hostname.com");
client.println("User-Agent: arduino-ethernet");
client.println("Connection: close");
client.println();

Serial.println("begin reading...");

char c;
boolean parsingHeader = true;

while(client.connected()) {
  while(client.available()) {

    if (parsingHeader) {
      Serial.println("Parsing Header");

      client.find((char*)"HTTP/1.1 ");
      char statusCode[] = "000";
      client.readBytes(statusCode, 3);
      statusOk = (strcmp(statusCode, "200") == 0);
      debug2("Status Code: ", statusCode);

      client.find((char*)"Content-Length: ");
      while (isdigit(c = client.read())) {
        content_length = (content_length * 10) + (c - '0');
      }
      debug2("Content-Length: ", content_length);

      client.find((char*)"\n\r\n");
      parsingHeader = false;

    } else {
      c = client.read();
      // if(length < content_length) { // Manual skip
        Serial.print(c);
        length++;
      // }
    }

  }
}

Serial.println();
Serial.println(content_length);
Serial.println(length);

我已经提取了主要的代码块,它存在于一个名为 loop() 的方法中,每 10000 毫秒调用一次。content_length 是正确的,但长度总是正好是两倍。我错过了什么?删除任何一个 while 循环都不会导致输出。

4

0 回答 0