这个 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->send(200, "text/plain", "Hello from ESP32 server route");
});
现在我们有一个工作路由,我们将配置第二个执行内部重定向。
路由声明和处理函数绑定的执行方式与上一个相同。尽管如此,在处理函数的实现中,我们将调用请求对象的不同方法来执行重定向。
因此,为了执行重定向,我们调用请求对象的重定向方法,将包含要重定向客户端的路由的字符串作为输入传递。
请注意,由于重定向是内部的,我们只需要指定路径(/hello
),我们不需要指定整个URL(不应该使用 http://{serverIp}
)。
我们将称这条路线为 /redirect/internal
。
server.on("/redirect/internal", HTTP_GET, [](AsyncWebServerRequest *request){
request->redirect("/hello");
});
完全一样,但现在我们将网站的 URL 传递给重定向方法。由于现在我们要重定向到外部位置,我们需要使用网站的整个网址,其中包括域名(或IP)。
我们将称这条路线为 /redirect/external
。
server.on("/redirect/external", HTTP_GET, [](AsyncWebServerRequest *request){
request->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->send(200, "text/plain", "Hello from ESP32 server route");
});
server.on("/redirect/internal", HTTP_GET, [](AsyncWebServerRequest *request){
request->redirect("/hello");
});
server.on("/redirect/external", HTTP_GET, [](AsyncWebServerRequest *request){
request->redirect("https://techtutorialsx.com/");
});
server.begin();
}
void loop(){}
要测试整个代码,首先编译并上传到 ESP32 微控制器,然后打开 Arduino IDE 串口监视器。
建立与无线网络的连接后,应打印分配给 ESP32 的本地 IP。复制它,因为我们要使用它来到达服务器。
现在,打开您选择的 Web 浏览器,输入以下 URL,然后按照您刚刚复制的 IP 和 {type}
更改 {yourDeviceIp}
的 external
或 internal
。
http://{yourDeviceIp}/redirect/{type}
对于内部服务器重定向,浏览器应指向返回 hello 消息的路由,如图1所示。请注意,如果我们打开浏览器的开发者控制台(在我的情况下,我正在使用 Google Chrome) 可以检查 redirect/internal
路由将返回 302 状态,这对应于重定向。
对于外部重定向,浏览器应该被定向到指定的网站,如图 2 所示。在这种情况下,我们已经在开发者控制台上打开了请求信息,以确认服务器正在返回 302 HTTP 响应 在响应标题中包含目标网址。
英语原文链接:ESP32 Arduino HTTP server: external and internal redirects
观光\评论区