ESP32: http Get location info bei Umleitung Code 302

Hallo!
Ich möchte mein WEB-Radio erweitern um auch Stationen, die eine Umleitung auf eine andere URL mit dem Status-Code 302 und der Content-Length 0 bei einem GET request zurück liefern.
Es ist mir bisher nicht gelungen die Server Antwort: Location URL aus der Get Anfrage zu extrahieren.

Wer hat eine Lösung?

https://de.wikipedia.org/wiki/HTTP-Statuscode#code302

Hallo!
Vielleicht hätte ich meine Frage besser formulieren sollen?
Ich möchte mit der Location URL, als Antwort auf mein 1. GET, der Umlenkung folgen:

Ich habe leider keine Bibliothek (httpClient.h oder ArduinoHttpClient.h) gefunden, die mir die Location Info zurückgibt.

Die Frage ist: wie kann ich die Location URL im Fall errCode = 302 (oder 301) und ** Inhalt Länge 0** im weiteren Programm verarbeiten?

Nachtrag:
Die Frage ist: wie kann ich die Location URL im Fall errCode = 302 (oder 301) und ** Inhalt Länge 0** im Programm auslesen?

Moin!
Code als Bild ist nicht so praktisch; besser: als Text, markieren, </> drücken und gut.

Zum Problem:
Ich habe mich mit wechselnder Intensität Wochen mit den Radiostreams rumgeschlagen (wie vermutlich viele andere mit minimalen Webradiolösungen, dem Code von Edzelf und eigenen Versuchen).
Am Ende hat nur eins wirklich funktioniert: Die Bibliothek von Wolle (schreibfaul). Die macht Dir die Umleitung automatisch; kannst Du sogar sehen, wenn Du die optionalen Debug-Funktionen benutzt.

Nachtrag falls Du es selbst machen willst: In seinem Code vs1053_ext.cpp ab Zeile 961 kannst Du sehen, wie er es macht:

        if(startsWith(pl, "location:")) {
            const char* host;
            pos = indexOf(pl, "http", 0);
            host = (pl + pos);
            sprintf(chbuf, "redirect to new host %s", host);
            if(vs1053_info) vs1053_info(chbuf);
            connecttohost(host);

Anmerkungen:

  • Kurz vorher wandelt er in Kleinbuchstaben; ich habe bei meinen Versuchen ebenfalls bemerkt, dass manche Sender Location: groß schreiben.
  • pl ist die empfangene Zeile; über die Pointer-Arithmetik host = (pl + pos); kann man streiten, aber damit geht es ohne Umkopieren und Stringklasse ab.
  • Am Ende verbindet er wieder neu: connecttohost(host)

Gruß Walter

2 Likes

Hallo Walter!

Ich habe das Programm ausprobiert. Es funktioniert gut! Danke für deinen Tipp!!
Ich werde den Code in meinem Net-Radio einbauen und dann posten.

Gruß
Peter

Ich habe mein NET-Radio mit der Bibliothek von "Wolle" umgebaut.
Das Ergebnis kann von meiner Internet Präsenz heruntergeladen werden:

Videoschnitt mit kdenlive und Linux - Dokumentationen & Technik Arduino ESP32 Internet Radio (ZIP-Archiv).

Danke für die Hilfe!

1 Like