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

Arduino Mega 2560发送GET请求获200 OK但无响应内容问题

Arduino Mega 2560使用uartWIFI库无法获取HTTP响应内容

我正在开发基于Arduino Mega 2560的项目,使用uartWIFI库能够成功向服务器发送GET请求。目标页面在GET请求时应返回"test",但串口监视器仅返回HTTP 200 OK,没有预期的内容。用curl访问该URL可正常获得"test"响应。

相关代码

HTTP请求函数

void httpRequest() {
  // 连接成功时执行
  if (wifi.ipConfig(TCP,server, 80)) 
  {
        
    Serial.println("-----------");
    DebugSerial.println("connecting...");
    
    // 构造请求URL
    String url = "/a.php?";
    url += "name=test";
    Serial.print("Requesting URL: ");
    Serial.println(url);
  
    
    wifi.Send("GET " + url + " HTTP/1.0\r\n\r\n");
    // 记录连接时间
    lastConnectionTime = millis();
  } 
  else 
  {
    // 连接失败时执行
    DebugSerial.println("connection failed");
    DebugSerial.println("disconnecting.");
    wifi.closeMux();
  }
}

主循环代码

void loop()
{
    
  char message[320];
  // 间隔指定时间后重新发送请求
  if((millis() - lastConnectionTime > postingInterval)) {
    httpRequest();
  } 
  // 读取网络响应并输出到串口
  delay(1000);
  if(wifi.ReceiveMessage(message)) 
  {
      Serial.println("Receive: ");
      DebugSerial.println(message);   
  }

  delay(100);

}

问题分析与解决方案

  • 完善HTTP请求格式
    HTTP/1.0协议中Host头虽非强制,但部分服务器需要该字段才能正确返回完整响应。修改请求发送代码,添加Host头:

    wifi.Send("GET " + url + " HTTP/1.0\r\nHost: " + server + "\r\n\r\n");
    
  • 循环读取完整响应
    uartWIFI库的ReceiveMessage函数可能仅读取单次串口收到的数据段,无法获取包含响应头和响应体的完整内容。修改loop中的读取逻辑,循环读取直到无数据:

    // 替换原读取部分代码
    delay(1000);
    Serial.println("Receive: ");
    while(wifi.ReceiveMessage(message)) 
    {
        DebugSerial.println(message);
        // 清空缓冲区,避免残留数据干扰下一次读取
        memset(message, 0, sizeof(message));
    }
    
  • 调整延迟时机
    原代码中的delay(1000)可能导致响应未完全到达就触发读取,可根据实际情况缩短延迟,或使用库提供的数据就绪判断函数替代固定延迟。

内容的提问来源于stack exchange,提问作者Sebastian S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 22:05:25