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

ESP8266控制WiFi RGB灯带时无法绕过InfinityFree的testcookie-nginx-module验证问题求助

解决ESP8266绕过InfinityFree的testcookie-nginx-module反机器人验证问题

看来你在ESP8266对接InfinityFree服务器时遇到了典型的反机器人验证障碍——毕竟微控制器没法执行JavaScript生成验证Cookie。你提到Postman测试没成功,大概率是请求头的格式搞错了,我来帮你梳理下正确的步骤,还有后续ESP8266上的代码实现。

先搞定Postman的测试(关键是Cookie格式)

你之前把完整的Cookie字符串(包括expires和path)都放进请求头了,这是问题所在!服务器在接收Cookie时,只需要__test=xxx这部分键值对,那些expires、path是浏览器用来管理Cookie生命周期的参数,不需要发给服务器。

正确的Postman操作步骤:

  • 新建一个GET请求,填入你的目标URL:http://thefreshsite.great-site.net/htm/theFreshSite.php?i=1
  • 切换到「Headers」标签,添加一个新的请求头:
    • 键:Cookie
    • 值:__test=cf2bd8c5785c8e65a8ebd1b58eb666f7(只保留这部分,去掉后面的expires=...和path=/)
  • (可选)如果还是失败,添加一个User-Agent请求头,模拟浏览器,比如:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36
  • 发送请求,应该就能拿到正常的网页内容了。

ESP8266上的代码实现

搞定Postman后,把同样的逻辑移植到Arduino代码里就行,用ESP8266HTTPClient库来添加Cookie请求头:

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

// 替换成你的WiFi信息和服务器URL
const char* ssid = "YourWiFiSSID";
const char* password = "YourWiFiPassword";
const char* serverUrl = "http://thefreshsite.great-site.net/htm/theFreshSite.php?i=1";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  
  // 等待WiFi连接
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi connected successfully!");
}

void loop() {
  if(WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    
    // 初始化HTTP连接
    if(http.begin(serverUrl)) {
      // 添加验证Cookie请求头
      http.addHeader("Cookie", "__test=cf2bd8c5785c8e65a8ebd1b58eb666f7");
      // 可选:添加User-Agent模拟浏览器
      http.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36");
      
      // 发送GET请求
      int httpCode = http.GET();
      
      if(httpCode > 0) {
        Serial.printf("请求成功,状态码:%d\n", httpCode);
        // 获取返回的网页内容
        String response = http.getString();
        Serial.println("返回内容:");
        Serial.println(response);
        // 这里可以解析response里的控制指令,控制RGB灯带
      } else {
        Serial.printf("请求失败,错误码:%d\n", httpCode);
      }
      
      // 关闭HTTP连接
      http.end();
    } else {
      Serial.println("无法初始化HTTP连接");
    }
  } else {
    Serial.println("WiFi未连接,尝试重连...");
    WiFi.reconnect();
  }
  
  delay(5000); // 每5秒查询一次服务器,可根据需求调整
}

注意事项

  1. Cookie的有效性:testcookie生成的__test值通常长期有效,但如果服务器更新了加密密钥,你需要重新在浏览器里获取新值:打开网站→F12打开开发者工具→切换到「Application」标签→在左侧「Cookies」里找到你的域名,复制__test的value即可。
  2. 请求头的完整性:有些服务器会校验User-Agent,如果ESP请求失败,就加上上面代码里的User-Agent头。
  3. 后续扩展:你可以在服务器端的PHP页面里加入RGB控制参数(比如?r=255&g=0&b=0),然后在ESP里解析返回的内容或者直接解析URL参数,来控制灯带。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 02:52:47