HTTP Request mit TextFinder Library verarbeiten

Hallo Zusammen,
ich versuche einen HTTP GET Request auszulesen und zu verarbeiten.
Leider komme ich nicht recht voran.

Nutze folgenden Code aus einem Beispiel:

EthernetClient client = server.available(); // Auf Anfrage warten
 
  if(client)
  {

    TextFinder finder(client);
 
    if(finder.find("GET"))
    {
      
      while(finder.findUntil("switch", "\n\r"))
      {
        
        char typ_char = client.read();
        String typ = String(typ_char);
        
        unsigned long int  number = finder.getValue();

        DO(typ , number); //Aktion ausführen

        typ="";
        number=0;
      }
    }

Wie Ihr seht nutze ich die TextFinder Library um den Request zu splitten. Kann mir jemand bei der Modifikation helfen, wenn ich folgenden Request schicke und verarbeiten will:

/?switchR30=ABCDEF12345

Brauche den Roten Teil als Char, den Blauen Teil als Integer und den Grünen Teil als String, wobei ich die Länge nicht vorher definieren möchte. Theoretisch soll der String bis zum nächsten Zeilenumbruch ("\n\r") ausgelesen werden. Natürlich wäre auch eine Lösung ohne die Library Willkommen.

Vielen Dank im Voraus,
Max

ist R immer einstellig?

ich kenn jetzt die Lib nicht, aber wenn das Protokoll bzw. Format immer so ist, würde ich es so lösen:

char inquiry[]="/?switchR30=ABCDEF12345";
char buffer[20];

void setup() {
  Serial.begin(115200);
Serial.println(inquiry);

char*  pos =strstr(inquiry, "switch");  // roten teil ermitteln
strcpy(buffer, pos+6);                  // linken Teil abschneiden
char a=buffer[0];                       // roten Teil in char. Achtung: Kein char array!
char b[2];                              // dto., aber in char array
b[0]=buffer[0];  
b[1]=0; 
uint16_t c=atoi(buffer+1);              // blauer Teil in integer wandeln

Serial.println(b);  
Serial.println(c);

// gruener Teil
pos =strstr(inquiry, "=");              // grünen teil suchen
strcpy(buffer, pos+1);                  // grünen Teil ohne "=" in buffer kopieren
Serial.println(buffer);
}

void loop() {
  // put your main code here, to run repeatedly:

}

Danke für die Antwort. Leider setzt dein Code jedoch voraus, das die String Länge bekannt ist. Diese kann sich jedoch ständig verändern. Demnach kann ich nicht 6Zeichen Abschneiden.. Und ja "R" ist immer nur ein Zeichen :slight_smile:

Demnach kann ich nicht 6Zeichen Abschneiden

? ? ?

char*  pos = strstr(inquiry, "switch"); // sucht den Text "switch" in inquiry
Wenn er gefunden wurde ( das sollte man noch abprüfen ) zeigt pos auf den Anfang von "switch" und pos+6 auf das Zeichen danach.

Ob du danach den Rest nach buffer umkopierst, ist eigentlich überflüssig...