Ho il seguente codice in cui requestLine
è sempre vuoto e non riesco a “capire perché. request
contiene una richiesta HTTP non elaborata e desidero ottenere la prima riga della richiesta che contiene il metodo e lURL.
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; }
Il primo println
restituisce 26 come ci si aspetterebbe per la stringa "GET /ilyen_nincs HTTP/1.1"
(25 caratteri), ma poi requestLine
è sempre vuoto. Mi chiedo perché?
Risposta
GET /ilyen_nincs HTTP/1.1\n
è lungo 26 caratteri, quindi gli indici di stringa vanno da 0 a 25. Poiché il tuo secondo argomento in substring(0, firstEOLAt);
supera lindice di fine della stringa, ti stai imbattendo comportamento imprevisto come da documentazione e ottenere una stringa vuota.
Attenzione: fai assicurati che i tuoi valori di indice siano allinterno della lunghezza della stringa o otterrai risultati imprevedibili. Questo tipo di errore può essere particolarmente difficile da trovare con la seconda istanza di substring () se la posizione iniziale è minore della lunghezza di String, ma la posizione finale non è “t.