ESP32 在 HTTP Post 上给 Flask 服务器报错

ESP32 gives error on HTTP Post to Flask server

我的目标是 post 数据到 Flask 服务器。为此,我在计算机(Jupyter)上有以下代码运行:

from flask import Flask
    
    from flask import request
    
    app = Flask(__name__)
    
    @app.route('/postjson', methods = ['POST'])
    
    def postJsonHandler():
    
        print (request.is_json)
    
        content = request.get_json()
    
        print (content)
    
        return 'JSON posted'
    
      
    
    app.run(host='0.0.0.0', port= 8090)

在esp上我有以下功能负责posting,目前只是为了测试,稍后我会进一步完善功能。

//Posts data to server
void post_to_server(String url)
{
  HTTPClient http;

  // Prepare JSON document
  JsonObject root = doc.to<JsonObject>();
  JsonArray pressure = root.createNestedArray("pressure");
  JsonArray time = root.createNestedArray("time");

  pressure.add("Pressure");
  time.add("Time");

  // Serialize JSON document
  String json;
  serializeJson(root, json);

  // Send request
  http.begin(url);
  http.addHeader("Content-Type", "application/json");

  int httpResponseCode = http.POST(json); //Send the actual POST request

  // Read response
  Serial.print(http.getString());

  if (httpResponseCode > 0)
  {
    String response = http.getString(); //Get the response to the request
    Serial.println(httpResponseCode);   //Print return code
    Serial.println(response);           //Print request answer
  }
  else
  {
    Serial.print("Error on sending POST: ");
    Serial.println(httpResponseCode);

    // Disconnect
    http.end();
  }
}

所以奇怪的是,当我像这样在测试服务器上调用函数时:

  post_to_server("http://jsonplaceholder.typicode.com/posts");

它工作正常,我在串行监视器上得到了预期的以下响应:

 {
  "pressure": [
    "Pressure" 
  ],
  "time": [
    "Time"
  ],
  "id": 101

但是当我尝试 post 在我的 PC 上 运行 服务器时,像这样:

 post_to_server("http://127.0.0.1:8090/postjson");

我收到以下错误:

0
[E][WiFiClient.cpp:258] connect(): socket error on fd 54, errno: 104, "Connection reset by peer"
Error on sending POST: -1

实在想不通所以就来了。我会 appriciate 任何帮助。我在 Postman 上测试时也得到以下信息:

post_to_server("http://127.0.0.1:8090/postjson");

这对你的 ESP32 永远不起作用。

127.0.0.1 是“环回地址”- 与名称 localhost 相同。 shorthand 意思是“这台电脑”。

当您在 Windows 机器上使用 运行 程序时,该程序将尝试连接到 Windows 机器。

当您将此与 ESP32 一起使用时,表示已连接到 ESP32。

您需要使用与您的 Windows 机器的网络连接关联的 IP 地址,无论是以太网还是 WiFi。 127.0.0.1 将不起作用。