1

イーサネットシールドが取り付けられたArduino Unoで遊んで、Webページを読み取ろうとしました。これまでのところ私のコードは機能していますが、何らかの理由で HTTP 本文を 2 回読み取っていて、その理由がわかりません。どんな助けでも大歓迎です。

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);

コードのメイン ブロックを抽出しました。これは、10000 ミリ秒ごとに呼び出される loop() で呼び出されるメソッドに存在します。content_length は正しいですが、長さは常に正確に 2 倍になります。私は何が欠けていますか?while ループのいずれかを削除すると、出力がなくなります。

4

0 に答える 0