发送带有ESP8266的 HTTP 发布请求
Sending an HTTP Post Request with ESP8266
我正在尝试使用我的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);
}
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 如何在boost beast http请求中设置http头
- 发送一个带有libcurl C++问题的帖子请求:s
- 在多个核心中处理一个HTTP请求
- 错误:请求非类类型为"MULTIMEDIA_FILME [500]"的成员|
- 使用 Winsock2.h C++向不和谐 API 发送 HTTP 请求时出现问题
- 每个服务器请求的内存预算
- std::getline没有在while循环中重新请求用户输入
- 请求最简单的 OpenMP 目标 GPU 示例
- 请求有关C++中嵌入 for 循环的帮助
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 使用 winsock 接收 http 请求
- QNetworkAccessManager 稍后在添加请求时删除
- 为什么我收到来自谷歌的错误请求?
- 从网链套接字请求连接设备的列表
- libcurl :C++处理多个异步请求
- 对于 http 请求,python 比 c++ 快吗?
- 通过引用传递向量是请求 std::分配器
- 为什么当通过 TCP 发送的消息速率增加时,请求-响应消息对的延迟会降低?
- pThread 中的 curl 请求在请求完成后崩溃