Tengo el siguiente código en el que requestLine
siempre está vacío y no puedo entender por qué. request
contiene una solicitud HTTP sin procesar, y quiero obtener la primera línea de la solicitud que contiene el método y la URL.
boolean parseRequest(String* request) { int firstEOLAt = request->indexOf("\n"); if (firstEOLAt < 0) return false; Serial.println(firstEOLAt); String requestLine = request->substring(0, firstEOLAt); Serial.println(requestLine); // ...rest of the parsing will go here... return true; }
El primer println
devuelve 26 como cabría esperar para la cadena "GET /ilyen_nincs HTTP/1.1"
(25 caracteres de longitud), pero luego requestLine
siempre está vacío. Me pregunto por qué?
Responder
GET /ilyen_nincs HTTP/1.1\n
tiene 26 caracteres, por lo que los índices de cadena van de 0 a 25. Dado que su segundo argumento en substring(0, firstEOLAt);
excede el índice final de la cadena, se está encontrando comportamiento inesperado según la documentación y obteniendo una cadena vacía.
Precaución: haga asegúrese de que los valores de su índice estén dentro de la longitud de la cadena o obtendrá resultados impredecibles. Este tipo de error puede ser particularmente difícil de encontrar con la segunda instancia de subcadena () si la posición inicial es menor que la longitud de la cadena, pero la posición final no es «t».