簡體   English   中英

使用 ESP8266 發送 HTTP 發布請求

[英]Sending an HTTP Post Request with ESP8266

我正在嘗試使用我的 esp8266 發出 POST 請求。 我已經設置了一個 webhook,我正在嘗試使用我的 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 請求,但它沒有。 我已經嘗試了很多事情,我很絕望。 所有幫助將不勝感激。 謝謝你。

它不可能在任何一種情況下工作,因為您使用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);
}

您應該將 localhost 替換為您 PC 網絡上的 IPv4 地址。 例如我的是 192.168.1.4

 "http://192.168.1.4:3000/cameraTest"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM