ESP32 教程:ESP32 Arduino HTTP 服务器:外部和内部重定向

这个 ESP32 示例代码的目标是,解释如何使用 Arduino core 上的异步 HTTP Web 服务器库执行重定向。这个 ESP32 教程的测试使用集成在 ESP32 FireBeetle 板上的 DFRobot 的 ESP-WROOM-32 设备来执行。

介绍

这个 ESP32 示例代码的目标是,解释如何使用 Arduino core 上的异步 HTTP Web 服务器库执行重定向。如果你还没有安装它们,请在这里检查如何做到这一点。

我们将检查如何重定向到内部和外部 URL。

这个 ESP32 教程的测试使用集成在 ESP32 FireBeetle 板上的 DFRobot 的 ESP-WROOM-32 设备来执行。

有关 HTTP 异步服务器的更多教程,请参阅相关的帖子部分。

代码

代码的第一部分类似于我们在之前的教程中,关于异步 HTTP Web 服务器的文章。所以,像往常一样,我们开始包括设置一切所需的库。

接下来,我们声明两个全局变量,它们将保存连接到 WiFi 网络所需的凭证。为了完成全局变量声明,我们还需要一个类 AsyncWebServer 的实例,我们将使用它来设置 HTTP 服务器。

#include <wifi.h>
#include <fs.h>
#include <asynctcp.h>
#include <espasyncwebserver.h>

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

AsyncWebServer server(80);

在设置功能中,我们将开始打开一个串行连接,然后将 ESP32 连接到 WiFi 网络。连接之后,我们将打印分配给它的本地 IP。

Serial.begin(115200);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
}

Serial.println(WiFi.localIP());

现在我们将配置我们的服务器的路由。首先,我们需要一个简单的路线作为内部重定向的目的地。这条路由的处理函数将返回一个文本消息给客户端。 我们将称这条路线为 “/hello”。

server.on("/hello", HTTP_GET, [](AsyncWebServerRequest *request){
    request-&gt;send(200, "text/plain", "Hello from ESP32 server route");
});

现在我们有一个工作路由,我们将配置第二个执行内部重定向。

路由声明和处理函数绑定的执行方式与上一个相同。尽管如此,在处理函数的实现中,我们将调用请求对象的不同方法来执行重定向。

因此,为了执行重定向,我们调用请求对象的重定向方法,将包含要重定向客户端的路由的字符串作为输入传递。

请注意,由于重定向是内部的,我们只需要指定路径(/hello),我们不需要指定整个URL(不应该使用 http://{serverIp})。

我们将称这条路线为 /redirect/internal

server.on("/redirect/internal", HTTP_GET, [](AsyncWebServerRequest *request){
    request-&gt;redirect("/hello");
});

完全一样,但现在我们将网站的 URL 传递给重定向方法。由于现在我们要重定向到外部位置,我们需要使用网站的整个网址,其中包括域名(或IP)。

我们将称这条路线为 /redirect/external

server.on("/redirect/external", HTTP_GET, [](AsyncWebServerRequest *request){
    request-&gt;redirect("https://techtutorialsx.com/");
});

最后,在设置所有路由之后,我们需要调用服务器对象上的 begin 方法,以便开始监听传入的 HTTP 请求。 你可以查看下面的整个源代码。

#include <wifi.h>
#include <fs.h>
#include <asynctcp.h>
#include <espasyncwebserver.h>

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

AsyncWebServer server(80);

void setup(){

  Serial.begin(115200);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }

  Serial.println(WiFi.localIP());

  server.on("/hello", HTTP_GET, [](AsyncWebServerRequest *request){
    request-&gt;send(200, "text/plain", "Hello from ESP32 server route");
  });

  server.on("/redirect/internal", HTTP_GET, [](AsyncWebServerRequest *request){
    request-&gt;redirect("/hello");
  });

  server.on("/redirect/external", HTTP_GET, [](AsyncWebServerRequest *request){
    request-&gt;redirect("https://techtutorialsx.com/");
  });

  server.begin();
}

void loop(){}

测试代码

要测试整个代码,首先编译并上传到 ESP32 微控制器,然后打开 Arduino IDE 串口监视器。

建立与无线网络的连接后,应打印分配给 ESP32 的本地 IP。复制它,因为我们要使用它来到达服务器。

现在,打开您选择的 Web 浏览器,输入以下 URL,然后按照您刚刚复制的 IP 和 {type} 更改 {yourDeviceIp}externalinternal

http://{yourDeviceIp}/redirect/{type}

对于内部服务器重定向,浏览器应指向返回 hello 消息的路由,如图1所示。请注意,如果我们打开浏览器的开发者控制台(在我的情况下,我正在使用 Google Chrome) 可以检查 redirect/internal 路由将返回 302 状态,这对应于重定向。

ESP32 Arduino HTTP 重定向

对于外部重定向,浏览器应该被定向到指定的网站,如图 2 所示。在这种情况下,我们已经在开发者控制台上打开了请求信息,以确认服务器正在返回 302 HTTP 响应 在响应标题中包含目标网址。

302 示例

英语原文链接:ESP32 Arduino HTTP server: external and internal redirects

尚未评分
您的评分将帮助我们做出更好的玩法

观光\评论区

Copyright © 2017 玩点什么. All Rights Reserved.