发送带有ESP8266的 HTTP 发布请求

Sending an HTTP Post Request with ESP8266

本文关键字:请求 布请求 ESP8266 HTTP      更新时间:2023-10-16

我正在尝试使用我的esp8266发出POST请求。我已经设置了一个网络钩子,我正在尝试使用我的 esp8266 调用它。我已经尝试了各种方法,但似乎不起作用。

我第一次尝试使用 ESP8266HTTPClient 库,但它不起作用。 然后我尝试通过"client.println"直接发出发布请求,但它也没有奏效。当我发现我无法将 http 请求发送到我设置的 webhook 时,我开始将其发送到我通过 express 制作的本地网站,以便更容易测试它。发送简单的 curl 命令时,我得到了正确的响应,但是当我尝试通过 esp8266 发送 http 调用时,我无法。

以下是我使用 ESP8266HTTPClient 库的尝试:

#include <ESP8266WiFi.h>
#include <WiFiClient.h> 
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
const int sensorPin = 4;
WiFiServer server(80);
const  String altLink = "http://localhost:3000/message";
const String ssid = "shefer 2.4GHz";
const String password = "1234554321";
void setup() {
Serial.begin(9600);
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid,password);
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP Address: ");
Serial.println(WiFi.localIP());
server.begin();
}
void loop() {
HTTPClient http;
http.begin(altLink);
http.addHeader("Content-Type", "text/plain");
int sensorValue = int(analogRead(sensorPin)/128);
if(sensorValue >= 0 && sensorValue <=3){
Serial.println("Light is on, sending request");
int httpCode = http.POST("Hello from esp8266");
//int httpCode = http.POST("");
Serial.println("HTTP Code: " + httpCode);
if (httpCode != 200){
Serial.println("Couldn't send the request, got code: " + httpCode);
} else {
Serial.println("Request was sent successfully");
}
http.end();
delay(5000);
}
}

这是我尝试直接通过"client.println"发出发布请求

#include <ESP8266WiFi.h>
#include <WiFiClient.h> 
#include <ESP8266WebServer.h>
WiFiServer server(80);
const String ssid = "shefer 2.4GHz";
const String password = "1234554321";
void setup() {
Serial.begin(9600);
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid,password);
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP Address: ");
Serial.println(WiFi.localIP());
server.begin();
}
void loop() {
WiFiClient client;
String data;
Serial.print("Requesting POST: ");
// Send request to the server:
client.println("POST /message HTTP/1.1");
client.println("Host: localhost:3000");
client.println("Accept: */*");
client.println("Content-Type: text/plain");
client.print("Content-Length: ");
client.println(data.length());
client.println();
client.print(data);
delay(50000);
}

我希望 esp8266 发送 POST 请求,但它没有。我尝试了很多事情,我很绝望。所有的帮助将不胜感激。谢谢。

您应该将本地主机替换为PC网络上的IPv4地址。 例如,我的是 192.168.1.4

"http://192.168.1.4:3000/cameraTest"

无论哪种情况,它都不可能工作,因为您使用的是localhost作为目标。

localhost的意思是"自我" - 它指的是发送请求的计算机。IP 地址 127.0.0.1 也是如此。在这种情况下,它们将引用运行代码的ESP8266 - 而不是您尝试与之通信的Web服务器。

您需要使用要将请求发送到的计算机的实际名称或 IP 地址,而不是localhost

在打印数据后包含一个终止 println((

void loop() {
WiFiClient client;
String data;
Serial.print("Requesting POST: ");
// Send request to the server:
client.println("POST /message HTTP/1.1");
client.println("Host: localhost:3000");
client.println("Accept: */*");
client.println("Content-Type: text/plain");
client.print("Content-Length: ");
client.println(data.length());
client.println();
client.print(data);
client.println();   //HTTP request termination empty line
delay(50000);
}