esp32 http client response только 200 не получил данные после этого
Я использую esp32 в качестве клиента и использую следующий пример. Итак, здесь я получаю только ответ заголовка, который равен 200. После этого я не получаю никакого ответа. вот пример
#include <WiFi.h>
#include <HTTPClient.h>
const char* ssid = "yourNetworkName";
const char* password = "yourPassword";
void setup() {
Serial.begin(115200);
delay(4000);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
}
void loop() {
if ((WiFi.status() == WL_CONNECTED)) { //Check the current connection status
HTTPClient http;
http.begin("http://jsonplaceholder.typicode.com/comments?id=10"); //Specify the URL
int httpCode = http.GET(); //Make the request
if (httpCode > 0) { //Check for the returning code
String payload = http.getString();
Serial.println(httpCode);
Serial.println(payload);
}
else {
Serial.println("Error on HTTP request");
}
http.end(); //Free the resources
}
delay(10000);
}
данный URL работает и со мной. но если я укажу другой URL-адрес, я получаю ответ только как 200. но не получает данные json, которые присутствуют в URL-адресе запроса.
@dev_eng, 👍0
Обсуждение1 ответ
Ответ 200 не гарантирует, что ваша полезная нагрузка
действительно будет содержать какие-либо данные. Это зависит от сервера. Сервер может решить ответить кодом 200, но по-прежнему не вернет код JSON для вашего запроса.
Я совсем не уверен, но сервер может отклонить ваш запрос, потому что ему не нравится ваш пользовательский агент. Я видел, как мой собственный ESP8266 поставляет ESP8266HTTPClient в качестве пользовательского агента для HTTP-запросов. Из исходного кода класса HttpClient видно, что это по умолчанию:
HTTPClient::HTTPClient()
: _client(nullptr), _userAgent(F("ESP8266HTTPClient"))
{
// так далее...
}
Вы можете рассмотреть возможность установки пользовательского агента для вашего объекта HTTP-клиента:
http.setUserAgent("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0");
Если вы хотите узнать больше, вы можете использовать curl из командной строки (это работает в Linux), чтобы эмулировать http-запрос, формируемый вашим устройством ESP:
curl -vA "ESP8266HTTPClient" http://jsonplaceholder.typicode.com/comments?id=10
На моем компьютере с Linux это возвращает всю информацию заголовка HTTP, за которой следует некоторый JSON для URL-адреса, который вы указали в своем коде:
[ { «Идентификатор сообщения»: 2, "это": 10, "имя": " "электронная почта": "[email protected]", "тело": "Кто упрекает нас в простом удовольствии, тот не будет иметь страданий\nпотому что каких страданий он хочет и не наказывает\ из-за наших потребностей\nничего не ищет, и мы обвиняем только легкие" } ]
Может быть, попробовать это с другим URL и посмотреть, что получится?
Вы также можете изменить свой пост, указав серийный вывод своего скетча, чтобы предоставить более подробную информацию.
- esp32 Stack canary watchpoint срабатывает
- Чтение данных из Google Таблиц с помощью Nodemcu
- HTTP POST от Arduino/ESP8266/ESP32 Как отправлять параметры (x-www-form-urlencoded)
- ESP8266 не отвечает через случайные промежутки времени
- ESP32 millis не работает должным образом
- Выполнение HTTPS-запросов с использованием команд ESP8266 AT
- Метод HTTP PUT на NodeMCU/ESP8266
- Может ли ESP 32 использовать библиотеку проводов точно так же, как это было в Arduino?
Ваш код работает без проблем. Что вы имеете в виду, «но если я дам другой URL»? Кстати, если вы используете esp32, не помечайте esp8266., @hcheung