我一直在玩带有以太网屏蔽的 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 循环都不会导致输出。