You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WAMP本地服务器发送HTTP请求时出现400 Bad Request错误求助

解决NodeMCU8266发送RFID ID到WAMP服务器出现400 Bad Request的问题

问题原因分析

400 Bad Request错误说明服务器无法解析你的请求,结合代码和串口输出,核心问题出在两处:

  • RFID标签ID的拼接逻辑错误:直接将字节类型的UID转为字符串会引入不可打印的非法字符,导致URL格式无效
  • device_token末尾带有空格,未经编码就发送,破坏了请求参数的合法性

具体修复步骤

1. 修正RFID UID的字符串转换逻辑

原代码直接把字节值拼接成字符串,会产生不可见字符。改为将每个字节转为两位十六进制字符串,确保所有字符都是合法的URL字符:

String CardID ="";
for (byte i = 0; i < mfrc522.uid.size; i++) {
    // 不足两位的十六进制数补前导0,保证格式统一
    if(mfrc522.uid.uidByte[i] < 0x10) CardID += "0";
    // 将字节转为十六进制字符串
    CardID += String(mfrc522.uid.uidByte[i], HEX);
}
// 可选:统一转为大写,避免大小写不一致引发的匹配问题
CardID.toUpperCase();

2. 清理device_token的多余空格

原代码中device_token末尾有空格,去掉后避免URL参数包含非法空格:

const char* device_token  = "115f2dbcafdb111d";

3. 开启URL日志排查

取消Serial.println(Link);的注释,这样可以在串口看到完整的请求URL,方便直观确认参数格式是否正确:

Serial.println(Link);   // 打印完整请求URL,用于排查问题

4. 可选:对GET参数进行URL编码

如果参数中可能包含特殊字符,引入urlEncode函数对参数进行编码(需要额外引入ESP8266WebServer库):

// 在代码顶部添加库引用
#include <ESP8266WebServer.h>

// 拼接参数时对每个参数进行编码
getData = "?card_uid=" + urlEncode(Card_uid) + "&device_token=" + urlEncode(device_token);

5. 检查服务器端PHP代码

确保getdata.php能正确处理GET参数,示例代码如下:

<?php
// 检查参数是否存在并去除前后空格
$card_uid = isset($_GET['card_uid']) ? trim($_GET['card_uid']) : '';
$device_token = isset($_GET['device_token']) ? trim($_GET['device_token']) : '';

// 参数为空时返回400错误
if(empty($card_uid) || empty($device_token)){
    http_response_code(400);
    echo "Missing parameters";
    exit;
}

// 这里添加你的业务逻辑,比如写入数据库、验证权限等
echo "succesful";
?>

验证修改

修改后重新编译上传代码,扫描RFID标签,串口应该会返回200状态码,服务器也能正确接收并处理标签ID。

内容的提问来源于stack exchange,提问作者MOHAMED NAJAH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:30:57