ESP32:HttpClient.get()失败并显示-1

时间:2020-05-17 18:26:04

标签: http wifi http-get arduino-ide esp32

我正在用ArduinoIDE编程ESP32,并且HTTP GET出现问题。我在做什么:

  • ESP32使用固定的静态IP作为WiFi客户端连接到现有的WiFi网络
  • 启动了一个Web服务器,其中提供了用于OTA固件更新的网页->此方法可以通过静态IP访问该网页
  • 我使用HttpClient尝试获取另一个远程Web服务器,但这失败了

这是我用于HTTP GET调用的代码:

static WiFiClient wifi;

HttpClient wlanHttp=HttpClient(wifi,"my.server.tld");
wlanHttp.get("/setpos.php?id=DEADBEEF"); // -> this fails with error code -1
wlanHttp.responseStatusCode(); // follow-up error -1
wlanHttp.stop();

你知道这里出了什么问题吗?

2 个答案:

答案 0 :(得分:1)

这里令人困惑的部分是ESP32有一个内置的HTTP客户端HTTPClient。 Arduino的一个叫做HttpClient,我想找一个决定这个名字的人,看看他是否还好。 HTTPClient有一个名为getString()的例程,该例程是从json api调用中收集信息的一种好方法,但是HttpClient不会编译该例程,因为它不知道那是什么。

答案 1 :(得分:0)

在ESp32上(如果使用HTTPClient.h),代码应如下所示:

static WiFiClient wifi;
HttpClient wlanHttp;

wlanHttp.begin("http://my.server.tld/setpos.php?id=DEADBEEF"); //Specify the URL
int httpCode = wlanHttp.GET();                                 //Make the request

if (httpCode > 0) { //Check for the returning code
  if (httpCode == HTTP_CODE_OK) { 
    // get payload with http.getString();
    Serial.println(httpCode);
    // Serial.println(payload);
  } else {
    Serial.printf("[HTTP] GET... failed, error: %s\n", wlanHttp.errorToString(httpCode).c_str());
  }
} else {
  Serial.println("Error on HTTP request");
}

wlanHttp.end(); //Free the resources