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-адресе запроса.

, 👍0

Обсуждение

Ваш код работает без проблем. Что вы имеете в виду, «но если я дам другой URL»? Кстати, если вы используете esp32, не помечайте esp8266., @hcheung


1 ответ


2

Ответ 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 и посмотреть, что получится?

Вы также можете изменить свой пост, указав серийный вывод своего скетча, чтобы предоставить более подробную информацию.

,