Parsing non funziona.

Salve, premetto che il parsing lo ho usato altre volte per leggere “qualcosa” e ha sempre funzionato.
adesso con questo indirizzo e stringa web non riesco proprio
devo leggere degli SMS, se li leggo direttamente dal brower la pagina si visualizza perfettamente, ma farli leggere ad arduino NON se ne parla. DOV’E’ L’ERRORE?

ripeto con la stessa sintassi e forma funziona, ma se uso questa stringa di GET NON va, perchè…
allego codice

void LetturaSMS()
{ 
    strURL ="GET /cgi-bin/sms_list?username=andrea&password=andrea HTTP/1.1";
    Serial.println(F("-----------------------------------------------------------------------------------")); 
    Serial.println(strURL);
    String Temporanea="";

    if (ClienteComando.connect("192.168.1.1",80)) 
    { 
      ClienteComando.println(strURL); 
      ClienteComando.println("Host: 192.168.1.1"); 
      ClienteInvio.println("Connection: close");
      ClienteInvio.println(); 
      uint32_t beginWaita=millis();

      Serial.print(F("-->ClienteComando ")); while( (ClienteComando.available()==0) && ((millis()-beginWaita)<6000) ) { Serial.print(F(".")); delay(200); }  Serial.println();

      while (ClienteComando.available())  
      {
        c=ClienteComando.read(); 
        Temporanea=Temporanea+c; 
        Serial.print(c);
        if (Temporanea.indexOf("Index:")>0) { Temporanea="Index:"; }
        if (Temporanea.indexOf("-----------+-------------------")>0) 
        { 
          Serial.print(F("Temporanea da LETTURA: >")); Serial.print(Temporanea); Serial.println(F("<"));
          break;
        }
      } 
      Temporanea=""; ClienteComando.stop();
    } 
Serial.println(F("-----------------------------------------------------------------------------------")); 
}

Uhm, ma come possiamo dirti "non va perché..." se non ci dici l'output della funzione e cosa risponde esattamente quella pagina (l'intero output di risposta al GET) non so come risponderti...

A parte che dovresti evitare come la peste di usare le variabili "String".. Ottimizzi la memoria con le costanti in flash con F() e poi mi usi le String, è come pensare di fare la dieta mangiando il giorno solo mele e poi la sera una teglia di parmigiana...

Deve avere come risultato la risposta degli sms presenti su un router GSM teltonika. Quindi un out che visualizzo in web funziona bene e con il parsing, non mi da nessuna risposta. Potrebbe essere colpa del router?

questo è l'out

Index: 1
Date: 2019-01-29 16:58:11
Sender: +39348xxxxxx
Text: Prova
Status: read
------------------------------

A prescindere da questo scorcio di programma che ho postato nel primo post, il programma è molto complesso utilizzo in tutto 15 variabili string, cosa mi consigli per le string?

bitmanrc:
Deve avere come risultato la risposta degli sms presenti su un router GSM teltonika.

Non avendo quel router non ho idea di come si suppone che debba funzionare...
Però nel codice (parziale) non ho capito una cosa:

     ClienteComando.println(strURL); 
      ClienteComando.println("Host: 192.168.1.1"); 
      ClienteInvio.println("Connection: close");
      ClienteInvio.println();

Cos'è l'oggetto ClienteInvio? Perché non tutto ClienteComando? Ossia:

     ClienteComando.println(strURL); 
      ClienteComando.println("Host: 192.168.1.1"); 
      ClienteComando.println("Connection: close");
      ClienteComando.println();

Tu da standard per una request http devi mandare di seguito la GET, la linea "Host", la "Connection" e poi una riga vuota. Se ClienteInvio è un altro oggetto, non mandi la Connection, che è opzionale, ma soprattutto non mandi la linea vuota quindi il server non risponde perché non hai completato l'intestazione della request!
Verifica e fammi sapere.

A prescindere da questo scorcio di programma che ho postato nel primo post, il programma è molto complesso utilizzo in tutto 15 variabili string, cosa mi consigli per le string?

Trovi gazilioni di post in questo forum sul discorso delle String che sono pericolose su Arduino (per via della gestione della memoria non efficiente come in sistemi più evoluti), e che vanno sostituite con le "stringhe C" ossia "char*" oppure, che è la stessa cosa ma con la quale allochi anche lo spazio massimo per contenere la stringa più lunga (+1 carattere) "char nome[dimensione]".
Ad esempio assumendo che la stringa non sarà mai più lunga di 255 caratteri avrai:

//String Temporanea="";
char Temporanea[256] = "";
byte p = 0;

quindi:

       c=ClienteComando.read(); 
        //Temporanea=Temporanea+c;
        Temporanea[p++] = c;
        Temporanea[p] = 0; // Carattere fine stringa

Poi per trovare il sostituto di indexOf() e altre cose, prova a leggere qualche pagina che descrive come si usano le stringhe C, ad esempio QUI.
Fidati che ti conviene abituarti ai char* perché con così poca memoria su queste MCU è importante non usarla male...

Che stupido !!!!!
non mi ero accorto della differenza

     ClienteComando.println(strURL); 
      ClienteComando.println("Host: 192.168.1.1"); 
      ClienteInvio.println("Connection: close");
      ClienteInvio.println();

GRAZIE!!!!!!!! adesso vaaaaa... scusate

bitmanrc:
GRAZIE!!! adesso vaaaaa… scusate

Bene, meglio così, sono contento di esserti stato utile!
Ma non scusarti, capita a tutti una svista.

Resta comunque il fatto che dovresti togliere quella String se non vuoi rischiare il blocco del programma: la variabile è locale della funzione quindi viene allocata e deallocata ad ogni chiamata della funzione, e la memoria riallocata ad ogni concatenazione, e dato che non esiste alcun garbage collector lo spazio precedentemente allocato non viene quasi mai riutilizzato per cui ad un certo punto si satura la RAM ed il programma si “impantana”.

Se sai che ad esempio ogni riga della response non sarà mai più lunga di 255 caratteri per riga, allocati una variabile STATICA (ossia FUORI dalla funzione) da 256 byte ed usa sempre quella (provvedendo a resettarla all’inizio di ogni chiamata alla funzione, imponendo il terminatore 0x00 al primo carattere).
E poi magari indenta meglio le righe per renderle più leggibili ed inserisci qualche commento (quantomeno per facilitare la lettura a chi mostri il codice per chiedere consigli).

Esempio:

#define MAX_BUF 256
char buffer[MAX_BUF];
int p = 0;

void LetturaSMS()
{
  strURL = "GET /cgi-bin/sms_list?username=andrea&password=andrea HTTP/1.1";
  Serial.println(F("-----------------------------------------------------------------------------------"));
  Serial.println(strURL);
  p = 0;
  buffer[p] = 0;

  // Mi connetto
  if (ClienteComando.connect("192.168.1.1", 80))
  {
    // Mando la request GET
    ClienteComando.println(strURL);
    ClienteComando.println("Host: 192.168.1.1");
    ClienteComando.println("Connection: close");
    ClienteComando.println();
    uint32_t beginWaita = millis();

    Serial.print(F("-->ClienteComando "));
	// Attendo l'inizio della risposta entro 6 secondi
    while ( (ClienteComando.available() == 0) && ((millis() - beginWaita) < 6000) ) {
      Serial.print(F("."));
      delay(200);
    }
    Serial.println();

	// Elaboro la risposta
    while (ClienteComando.available())
    {
	  // Leggo il carattere
      c = ClienteComando.read();
	  // Lo accumulo nel buffer
      buffer[p++] = c;
      buffer[p] = 0;
      Serial.print(c);
	  // Sono arrivato all'index?
      if ( strstr(buffer, "Index:") ) {
	    // Si, imposto il buffer a partire da questo
        strcpy(buffer, "Index:");
      }
	  // Oppure la riga finale?
      else if ( strstr(buffer, "-----------+-------------------") )
      {
	    // Si, scrivo il buffer
        Serial.print(F("buffer da LETTURA: >")); 
        Serial.print(buffer); 
        Serial.println(F("<"));
        break;
      }
    }
	// Azzero il buffer
    buffer[0] = 0;
    p = 0;
    ClienteComando.stop();
  }
  Serial.println(F("-----------------------------------------------------------------------------------"));
}