イーサネットシールドが取り付けられた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 ループのいずれかを削除すると、出力がなくなります。