使用 Arduino 和 ESP8266 的 HTTP GET 请求
HTTP GET request using Arduino and ESP8266
我正在尝试使用带 ESP82660 的 arduino Mega 2560 发出 HTTP GET 请求,
但它总是重启我的 esp8266。
这是我的方法:
char *hello = "GET /api/bus/register?code=";
strcat(hello,test);
strcat(hello," HTTP/1.1\r\nHost: 192.168.88.233\r\nConnection:close\r\n\r\n");
wifi.send((const uint8_t*)hello, strlen(hello));
uint32_t len = wifi.recv(buffer, sizeof(buffer), 10000);
if (len > 0) {
Serial.print("Received:[");
for(uint32_t i = 0; i < len; i++) {
Serial.print((char)buffer[i]);
}
Serial.print("]\r\n");
}
您需要分配一个足够大的缓冲区来容纳整个连接字符串,例如:
char hello[256];
strcpy(hello, "GET /api/bus/register?code=");
strcat(hello, test);
strcat(hello," HTTP/1.1\r\nHost: 192.168.88.233\r\nConnection:close\r\n\r\n");
(以上代码仍然不安全,你还需要检查测试的大小或使用strncat
)
您这样做的方式会导致数组溢出和可能的内存损坏。如果使用 wifi.send
.
发送损坏的数据,这可能是重置 ESP82660 的原因
如果测试后还没有换行符,您可能还需要 strcat
换行符。
我正在尝试使用带 ESP82660 的 arduino Mega 2560 发出 HTTP GET 请求, 但它总是重启我的 esp8266。
这是我的方法:
char *hello = "GET /api/bus/register?code=";
strcat(hello,test);
strcat(hello," HTTP/1.1\r\nHost: 192.168.88.233\r\nConnection:close\r\n\r\n");
wifi.send((const uint8_t*)hello, strlen(hello));
uint32_t len = wifi.recv(buffer, sizeof(buffer), 10000);
if (len > 0) {
Serial.print("Received:[");
for(uint32_t i = 0; i < len; i++) {
Serial.print((char)buffer[i]);
}
Serial.print("]\r\n");
}
您需要分配一个足够大的缓冲区来容纳整个连接字符串,例如:
char hello[256];
strcpy(hello, "GET /api/bus/register?code=");
strcat(hello, test);
strcat(hello," HTTP/1.1\r\nHost: 192.168.88.233\r\nConnection:close\r\n\r\n");
(以上代码仍然不安全,你还需要检查测试的大小或使用strncat
)
您这样做的方式会导致数组溢出和可能的内存损坏。如果使用 wifi.send
.
如果测试后还没有换行符,您可能还需要 strcat
换行符。