(十八)ESP32:HTTP POST 请求

释放双眼,带上耳机,听听看~!

本教程的目的是解释如何使用 ESP32 和 Arduino 环境支持发出 HTTP POST 请求。我们将使用 HTTPClient.h 库来实现。

介绍

本教程的目的是解释如何使用 ESP32 和 Arduino 环境支持发出 HTTP POST 请求。我们将使用 HTTPClient.h库来实现。

因此,我们不必担心在套接字连接之上构建 HTTP 协议,因为我们将有可用的方法来处理它。要使用相同的库发送 HTTP GET 请求,请查看之前的教程。

(十七)ESP32:HTTP GET请求

重要提示:在编写本教程时,HTTPClient.h 库刚刚合并到 Arduino 环境的 ESP32 库中。因此,您很可能需要更新到可用的最新代码。在此处查看如何操作。

编写代码

代码的初始部分将与使用 ESP32 的 HTTP GET 请求所需的相同。因此,我们将首先包含所需的库,声明一些全局变量来保存 WiFi 网络凭据,并在 Arduino undefined函数中连接到 WiFi 网络。如果您需要有关如何使用 ESP32 连接到 WiFi 网络的详细指南,请查看之前的教程。

重要提示:在撰写本文时,需要在调用WiFi.begin函数之前稍作undefined,以连接到 WiFi 网络。在更新 ESP32 库之前,不需要此undefined。尽管如此,当您测试代码时,最终可能不再需要此undefined,因此您可以使用此undefined并检查 ESP32 是否可以在没有它的情况下连接到 WiFi 网络。如果您遇到连接问题,您可能还需要增加它。

#include <WiFi.h>
#include <HTTPClient.h>


const char* ssid = "yourNetworkName";
const char* password =  "yourNetworkPassword";


void setup() {


  Serial.begin(115200);
  delay(4000);   //Delay needed before calling the WiFi.begin


  WiFi.begin(ssid, password);


  while (WiFi.status() != WL_CONNECTED) { //Check for the connection
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }


  Serial.println("Connected to the WiFi network");


}

在初始化代码之后,我们将进入主循环,我们将在其中编写发出 HTTP POST 请求所需的代码。我们将声明一个HTTPClient类的对象,它提供了处理 HTTP 协议所需的方法。

然后,我们在先前声明的对象上调用begin方法,并将我们要发出 POST 请求的网站的 URL 作为输入传递。我们将使用一个虚假的在线 REST API 网站,适合测试。你可以在这里查看。

HTTPClient http;
http.begin("http://jsonplaceholder.typicode.com/posts"); //Specify destination for HTTP request

之后,我们将调用addHeader方法,这将允许我们指定 HTTP 请求标头。 在这种情况下,我们将定义content-type标头,它指定我们将发送的请求正文的媒体类型。我们将其指定为“ text/plain ”,因为我们只发送一个简单的文本消息,没有任何特定的格式。

如下所述,此方法接收我们要指定的标头作为第一个输入,第二个输入是它的值。

http.addHeader("Content-Type", "text/plain"); //Specify content-type header

现在,要发送实际的 HTTP 请求,我们调用POST方法,将请求的正文内容作为输入传递。我们将发送一条简单的消息,仅用于说明目的。由于我们正在联系一个虚假的 API,它总是会接受输出的内容。

此方法将返回 HTTP 响应代码,我们将其存储在一个变量中。请注意,如果返回的值小于零,则连接上发生错误。如果它大于零,那么它是一个标准的 HTTP 代码

int httpResponseCode = http.POST("POSTING from ESP32"); //Send the actual POST request

由于我们存储了 HTTP 响应代码,我们将使用它来处理错误,如下面的代码所示。如果我们的请求发送成功,我们将通过调用getString方法获得 HTTP 应答。然后,我们将打印答案和 HTTP 代码。如果出现错误,我们将打印一条信息性消息。

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);
}

最后,我们将调用 http 对象的end方法来释放资源,这个很重要,不能忘记。检查下面的完整源代码,其中已经包含此调用。它还包括每个请求之间的undefined,以及在发送请求之前检查我们是否仍连接到 WiFi 网络:

测试代码

测试代码的过程与往常相同。只需使用 Arduino IDE 上传 ESP32 的代码并打开串行监视器以检查输出。你可以看到类似于图 1 的内容。

esp32-http-post-request

 

请注意,返回的 HTTP 201 代码对应于“created”。这意味着在服务器中创建了一个资源,这是预期的模拟行为,因为我们正在执行 POST。

所以,答案包括一个 ID,告诉我们新资源的标识符。由于这是一个假的测试网站,后端什么都没有发生,这是一个模拟的响应,所以下面的所有 POST 请求都将返回相同的 ID。此外,没有检查我们发送的内容的结构。

给TA打赏
共{{data.count}}人
人已打赏
esp32 postesp8266 posthttp posthttp请求
免费项目

如何在 Arduino ESP32 /ESP8266上使用 SmartConfig

2022-9-3 22:45:15

免费项目

ESP32 Arduino:FreeRTOS 队列

2022-9-3 23:49:15

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分