Hallo zusammen,
seit einigen Jahren habe ich ein kleines InfoCenter laufen.
Nach einem Telekommunikationsanbieterwechsel, wurden keine Termine mehr dargestellt.
Oder nur ab und an. Und ab und an ist in der IT kein akzeptabler Zustand!
Die Problematik ist, dass Google auf eine Anfrage immer mit einem Redirect antwortet. Bei den meisten Libraries kann man das einfach aktivieren, nicht aber bei WiFiClientSecure für ESP32.
Also einen Workaround gefunden:
https://esp32-server.de/google-sheets/
Hier wird Zeile für Zeile geprüft, wann der Header zu Ende ist und ob ein Location: folgt.
Die Zeilen liest man mit line = client.readStringUntil('\n');
Sobald zwei leere Zeilen aufeinander folgen, handelt es sich um das Ende des Headers.
Das hat mal besser, mal schlechter funktioniert.
Habe es mal mit Carriage Return, Linefeed oder beidem getestet. Mal gehts, mal nicht.
Gebe ich den ganzen Spaß im Terminal aus, so komme ich nur bis zum "Header:" und eine Leerzeile. Die Schleife wird offenbar dann verlassen:
void ReadHeader(WiFiClientSecure &client, String &movedURL) {
uint64_t startMillis = millis();
String line;
if (SerialOutput)
Serial.println("Header: ");
while (client.connected()) {
if (millis() - startMillis > timeout){
if (SerialOutput)
Serial.println("Timeout!");
break;
}
line = client.readStringUntil('\n');
if (SerialOutput)
Serial.print(line);
if (line == String('\r'))
{
if (SerialOutput)
Serial.println("Header End! break...");
break;
}
if (line.indexOf("Location") >= 0) { // Rerouting
if (SerialOutput)
Serial.println("Location: ");
movedURL = line.substring(line.indexOf(":") + 2 ) ;
}
}
}
Kann ja eigentlich nur sein, das client.connected auf false springt.
Test gerade und praktisch jedes zweite mal funktioniert es. Scheint aber nur am PC so zu sein, im Akkubetrieb vielleicht 1/5 Versuchen.
Nun die "Lösung"!
Während ich hier getippt habe, testete ich weiter und weiter, bis ich zufällig im Browser in den Entwickertools gesehen habe, dass ab und an im Header Location: oder location: steht ![]()
Weshalb auch immer sich das zwischen zwei Anfragen zu ändern scheint...
Thema also gelöst, aber vielleicht für den ein oder anderen dennoch interessant.