[i=s] 本帖最后由 WildboarG 于 2025-4-25 19:42 编辑 [/i]
[wb2]http - get应用

🧠 什么是 HTTP GET?
HTTP GET 是最常见的网页请求方式之一,作用是 向服务器请求信息,例如获取网页、查询数据、发起通知等。
请求格式一般像这样:
GET /notify?title=警报&message=发现目标 HTTP/1.0
Host: 192.168.0.233:8080
User-Agent: my-device
这个请求访问了 192.168.0.233:8080
上的 /notify
路径,并携带了两个参数:title
和 message
📟 应用场景
- 嵌入式设备检测到异常,通过 HTTP GET 请求发出警报;
- IoT 设备定时上传状态;
- 控制服务端触发自动化流程(如通知机器人、记录日志等)。
🛠️ MCU 端实现(简版)
#define WEB_SERVER "192.168.0.233"
#define WEB_PORT "8080"
#define WEB_PATH "/notify?title=警报&message=发现目标"
static const char *REQUEST = "GET " WEB_PATH " HTTP/1.0\r\n"
"Host: " WEB_SERVER ":" WEB_PORT "\r\n"
"User-Agent: wb2-device\r\n"
"\r\n";
void notify_task(void *pvParameters) {
// ... DNS解析 + socket连接略
write(sock, REQUEST, strlen(REQUEST));
// ... 接收响应略
close(sock);
}
🖥️ 服务端 Python 示例
用 Flask 快速搭建一个 HTTP 接收服务:
from flask import Flask, request
app = Flask(__name__)
@app.route("/notify")
def notify():
title = request.args.get("title")
message = request.args.get("message")
print(f"📢 来自设备的通知:{title} - {message}")
return "OK"
app.run(host="0.0.0.0", port=8080)
输出结果示例:
📢 来自设备的通知:警报 - 发现目标
🧪 测试方法
你可以在浏览器中直接输入:
http://192.168.0.14:8080/notify?title=测试&message=一切正常
应用测试
Bark
是一款非常方便的 iOS 推送通知工具,适合用来做 服务器/设备主动推送消息到手机。它背后的原理是:你通过一个 HTTP GET请求,把消息发送到 Bark 的服务器,Bark 会把这个消息通过 APNs 推送到你的 iPhone 上。
🔔 一句话解释:
Bark 就是一个“网页发消息 ➜ iPhone 收通知”的桥梁。
🛠️ 使用步骤:
1. 安装 Bark 应用(iOS)
去 App Store 搜索 Bark,图标是个狗头,下载安装。
2. 获取你的推送 URL
打开 Bark 后,应用会给你一个像这样的网址:
https://api.day.app/你的设备Key
这是你专属的推送地址!
3. 发送推送消息(GET 请求)
直接用浏览器、curl、或代码请求下面这个 URL:
https://api.day.app/你的设备Key/标题/内容
例如:
https://api.day.app/AbCDefGHiJ/警报/发现异常数据
你会立刻在手机上收到一条通知。
bark需要自建服务器,保护数据隐私安全。别担心,接下来带大家用docker搭建bark服务器, docker镜像仅仅只有23M大小。非常适合小型设备。比之前给大家推荐的GOFITY小的多得多。还有一点惊喜是bark不需要常驻后台,即便不启动。苹果的APNS推送也能实时发送到手机上,这就非常省电啦。
4. bark服务器的docker安装
docker pull finab/bark-server
docker run -dt \
--name bark \
-p 8080:8080 \
-v /data/bark:/data \
finab/bark-server
运行成功后先测试一下
curl http://0.0.0.0:8080/ping
{"code":200,"message":"pong","timestamp":1621936667}
5. 从wb2http get请求来将消息发到手机
在上次rd04雷达的demo(gotify [POST])上更改通知方式为(bark[GET],只需要修改NOTIFY代码的通知方式就可以了
#define WEB_SERVER "192.168.0.233"
#define WEB_PORT "8080"
#define WEB_PORTI 8080
#define WEB_PATH "/你的令牌/rador?call=1"
void notify_task(void *pvParameters);
static const char *REQUEST = "GET " WEB_PATH " HTTP/1.0\r\n"
"Host: " WEB_SERVER ":" WEB_PORT "\r\n"
"User-Agent: aithinker wb2\r\n"
"\r\n";
void notify_task(void *pvParameters) {
int sockfd;
struct sockaddr_in server_addr;
char response[512];
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
printf("socket failed\n");
vTaskDelete(NULL);
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(WEB_PORTI);
server_addr.sin_addr.s_addr = inet_addr(WEB_SERVER);
if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) <
0) {
printf("connect failed\n");
close(sockfd);
vTaskDelete(NULL);
}
printf("connected!\n");
write(sockfd, REQUEST, strlen(REQUEST));
int n = read(sockfd, response, sizeof(response) - 1);
if (n > 0) {
response[n] = '\0';
printf("Response:\n%s\n", response);
}
close(sockfd);
vTaskDelete(NULL);
}
记得在wb2开启的网页中打开哨兵,不然雷达不工作。
6. 效果

根据我填写的rador ?call=1 除了弹窗通知,还有响铃报警。

