Более быстрый способ анализа HTTP-ответа в Arduino
Я отправляю HTTP-запрос GET на сервер и получаю обратно следующие данные.
HTTP/1.1 200
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Nov 2018 16:30:05 GMT
Connection: close
35
{
"uuid" : "13b29524-7e12-48fb-bbf9-4396aefff45d"
}
0
С помощью следующего кода я получаю информацию заголовка и тело.
void parseResponse() {
boolean headerEnd = false;
byte lineCount = 0;
String line;
char endOfLine[] = "\r\n";
while (1) {
if (client.available()) {
char inChar = client.read();
if (!headerEnd && line.endsWith(endOfLine)) {
// Просто сохраняем первый, а затем заголовки
if (lineCount == 10) {
headerEnd = true;
} else {
headers[lineCount] = line;
line = "";
lineCount++;
}
}
if (line.endsWith("close")) {
line = "";
headerEnd = true;
}
if (headerEnd && line.endsWith("}")) {
line.toCharArray(response, sizeof(response));
client.stop();
break;
}
line += inChar;
}
}
}
На анализ уходит 60–70 мс. Есть ли более быстрый способ анализа? Я думаю, что в мире AVR это слишком медленно для такого небольшого количества текста.
@, 👍2
1 ответ
Лучший ответ:
▲ 3
есть хорошие функции, унаследованные от класса Stream
int parseResponse(char uuid[], int size) {
if (!client.find("HTTP/1.1")) // пропускаем HTTP/1.1
return -1;
int st = client.parseInt(); // анализ кода состояния
int l = -1;
if (st == 200 && client.find("\"uuid\" : \"")) {
int l = client.readBytesUntil('"', uuid, size);
uuid[l] = 0; // завершаем строку C
}
return l;
}
,
@Juraj
Смотрите также:
- Как публиковать запросы HTTP POST на моем веб-сайте?
- Почтовый запрос HTTP в формате JSON с использованием модуля SIM900
- Как правильно отправлять данные через http с помощью sim908?
- HTTP GET запрос с использованием Arduino Uno и ESP8266
- Как составить URL-адрес HTTP-запроса GET с параметрами ключ/значение
- ESP8266 Ошибка неверного запроса 400
- GSM-модуль Sim800l не может подключить данные gprs
- ESP8266 отправляет веб-страницу клиенту, но html-коды отображаются в браузере вместо веб-страницы