Tenho o seguinte código em que requestLine
está sempre vazio e não consigo descobrir o porquê. request
contém uma solicitação HTTP bruta e desejo obter a primeira linha da solicitação que contém o método e o 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; }
O primeiro println
retorna 26 como você esperaria para a string "GET /ilyen_nincs HTTP/1.1"
(25 caracteres), mas depois requestLine
está sempre vazio. Eu me pergunto por quê?
Resposta
GET /ilyen_nincs HTTP/1.1\n
tem 26 caracteres, então os índices da string vão de 0 a 25. Como seu segundo argumento em substring(0, firstEOLAt);
excede o índice final da string, comportamento inesperado de acordo com a documentação e obtendo uma string vazia.
Cuidado: make certifique-se de que seus valores de índice estão dentro do comprimento da String ou você obterá resultados imprevisíveis. Esse tipo de erro pode ser particularmente difícil de encontrar com a segunda instância de substring () se a posição inicial for menor que o comprimento da String, mas a posição final não for “t.