Jahrestag: GOV-Inhalte werden im GenWiki nicht mehr angezeigt

Ich habe jetzte einen Hinweis gefunden, dass der Server mit „Chunked Character Encoding“ antworten, ein neueres Verfahren, dass von dem älteren HttpClient nicht unterstützt wird. Dieses Verfahren teilt die Antwort in mehrere Datenblöcke (Chunks) auf, die jeweils mit ihrer Größe in Hexadezimaldarstellung beginnen.
Darauf könnten die Zeilen „4ff“ und „a“ hindeuten. Beim Chunked Character Encoding wäre dies die Größen der jeweils folgenden Blöcke, die aber falsch interpretiert werden.
Lösungen wären Umstieg auf Guzzle (möglicherweise aufwendig, auch wenn Guzzle auf den GenWiki-Servern installiert ist) oder die Verwendung der integrierten cURL-Funktionen in PHP (falls es in der verwendeten PHP-Version zur Verfügung steht, vielleicht das einfachste?) oder eine manuelle Verarbeitung die im Prinzip etwa so aussehen könnte:

function readChunkedResponse($fp) {
    $response = '';
    while (!feof($fp)) {
        // Lese die Zeilengröße in Hexadezimal
        $line = fgets($fp);
        $chunkSize = hexdec(trim($line));
        if ($chunkSize === 0) {
            break; // Ende der Übertragung
        }
        // Lese den Datenblock basierend auf der Chunk-Größe
        $response .= fread($fp, $chunkSize);
        // Lese die CRLF nach dem Datenblock
        fgets($fp);
    }
    return $response;
}

„neueres Verfahren“ ist allerdings relativ, das gibt es schon seit 28 Jahren: RFC 2068 - Hypertext Transfer Protocol -- HTTP/1.1

Aber es spricht einiges dafür, dass es auf dem alten GOV-Server nicht (jedenfalls nicht zwingend) implementiert war und dass vom HttpClient v0.9 vom 6. April 2003 (ok, auch schon fast 22 Jahre :wink: ) noch gar nicht unterstützt wurde.

Das könnte aber doch nur dann ein Grund sein, wenn kürzlich jemand Chunked Character Encoding aktiviert hätte. Bis vor kurzem funktionierte es ja noch im Testsystem. Klingt unwahrscheinlich.

Eigentlich suchen wir nach einer Änderung, die vor einem Jahr das Wirk-GenWiki getroffen hat und die kürzlich dann auch für das Testsystem wirksam geworden ist. Was passiert denn, wenn man auf diesen beiden Systemen von der Kommandozeile aus per curl den GOV-Webservice abfragt bzw. die Spezialschnittstelle aufruft, die aus GOV die Übersichtstabelle übergibt?

Und laut dem Code ganz oben wird der Content (egal wie codiert) erst im Else -Zweig geholt, aber da kommt man ja schon nicht mehr hin. Und laut Jesper erreicht die Abfrage aus dem GenWiki GOV gar nicht und somit kann GOV auch keinen codierten Inhalt zurück liefern. Das hier ist eine Sackgasse.

Soweit ich es verstanden habe, wäre das Chunked Character Encoding auf dem Zielsystem (GOV) aktiviert (oder als zwingend vorgeschrieben) worden, während unser HttpClient auf den GenWiki-Systemen das noch nicht unterstützt.

Wobei das http/https-Problem zusätzlich bestanden hat, was aber seit heute durch die Änderungen in Gov.php gelöst worden ist - richtig?

So habe ich es auch verstanden und deswegen heute HTTP 1.1 eingestellt. Ich kann morgen gerne wieder mit 1.0 testen.

in der buildRequest, war vorher 1.0

Das finde ich auch vielversprechend.

Das kann aber im Detail noch viel Fehlersuche bedeuten …

Ok, sehr interessanter Hinweis. Dann wäre zu testen, ob es mit der erfolgten Umstellung auf https, aber mit Zurückgehen auf 1.0 funktioniert. Sicher nur als Zwischenlösung, um endlich den Usern die Funktionalität wieder bereitzustellen.

Man könnte aber auch versuchen, Guzzle für unseren Zweck zu aktivieren, da es laut Spezial:Version auf beiden Wiki-Systemen bereits installiert ist, oder cURL zu nutzen.

Das ist ein Witz oder? Aktuell macht man ich über den Umstieg auf HTTP/3 Gedanken und das GenWiki-System verwendet Software, die so alt ist, dass sie nur HTTP/1.0 unterstützt und nicht das neuere (erst 28 Jahre) HTTP/1.1. So eine sollte besser gar nicht mit dem Internet verbunden sein.

Wenn es nach mir geht, würde ich mich gar nicht mit der alten Erweiterung beschäftigen und über ein Widget eine völlig neue Schnittstelle zu GOV erstellen.

Und was spricht denn überhaupt gegen eine Lösung mit einem Widget?

Gar nichts. Muss halt jemand machen.

Es könnte ja auch noch andere Bedenken geben, die ich nicht kenne …

Also wenn Du die Extension Widget installierst, biete ich mich gerne an. Auch im Hinblick auf die ebenfalls ausstehende Lösung für <lastname-map> wäre das hilfreich. Es wäre eine Lösung im Rahmen der Wikimedia-Software und wir müssten uns nicht mit irgendwelchen Protokoll-Spezifikationen herumschlagen.

Die bisherige Lösung legt automatisch eine Umleitung für die Kennung im GOV-Namensraum an. Das würde das Widget wohl nicht machen.

Ich stelle dir eine frische 1.39 mit installierter Widget-Extension bereit.

Warum sollte das mit Widget nicht klappen?

:+1:

Du meinst, die bestehenden <gov>-Tags (Hooks) zu interpretieren?
Entweder müsste man mit einem Bot einmalig alle <gov>govID</gov> -Aufrufe ersetzen durch
{{#widget:gov|id={$govId}}}

oder man müsste den bestehenden Hook für so ändern, dass er den Aufruf
{{#widget:gov|id={$govId}}}
generiert, anstatt wie bisher den HttpClient aufzurufen usw. usf.

Ich möchte dazu aus Bernhards Signatur in der CompGenD-l zitieren: „Es ist als würden wir in einer windschiefen Hütte wohnen, wo wir uns
gegenseitig beibringen, den herabbröckelnden Putz mit Spucke
festzukleben, statt in den Neubau nebenan zu ziehen.

Spaß beseite. Auf etablierte Lösungen zurückzugreifen ist immer besser, als Marke Eigenbau. Etablierte Lösungen werden manigfach getestet und geprüft, sie werden auch weiter entwickelt. Der Umstieg von unseren Gerüsten ist sicherlich eine große Kraftleistung. Aber sie muss gemacht werden. Danach ist die Wartung um einiges leichter.
Ich habe einen Kumpel in Jena, der hat sich vor 10 Jahren eine Laube mit Garten gekauft. Sah gut aus, aber stammt natürlich aus DDR-Zeiten. Damals gab es für Normalos nicht mal zeitgemäße Rüttelplatten. Alles war schief. Eigentlich wollte er ein Jahr später zu Einweihungsfeier laden. Tatsächlich hat er 9 Jahre später die gesamte Hütte abgerissen und neu gebaut - nicht, weil er sich 9 Jahre überlegt hat, was zu tun ist, sondern weil er 9 Jahre Vorarbeiten erledigen musste: neue Kabel, neue Leitungen, anständiges Fundament, richtige Feldtoilette, stabile Treppe, etc. Ja, der Übergang ist schwer, aber die neue Laube wird 20 Jahre halten und kann mit Standardlösungen in Schuß gehalten werden.