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.
相关产品推荐
相关产品推荐

