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
将不起作用。
我的目标是 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
将不起作用。