HTTPRequest - Connect-Timeout wird ignoriert

  • Affected Version
    WoltLab Suite 5.3

    Erst im letzten Jahr, als von Guzzle noch keine Rede war, gab es bereits das Problem, dass die Timeout-Einstellungen der HTTPRequest-Instanz nicht gegriffen haben (s. HTTPRequest - Timeout funktioniert nicht).


    Mindestens seit 5.3.2 und den dort durchgeführten Änderungen bzgl. Timeout, funktioniert es (reproduzierbar) wieder nicht. Statt der eingestellten 5 Sekunden, läuft der Vorgang ewig, bis vermutlich der Webserver oder PHP die Verbindung schließen, was bei uns aktuell 2 Minuten dauern kann, wogegen es in 5.3.1 und 5.2 wie erwartet funktioniert und die Verbindung nach 5 Sekunden gekappt wird.

  • Alexander Ebert

    Changed the title of the thread from “HTTPRequest - Timeout wird (mal wieder) ignoriert” to “HTTPRequest - Connect-Timeout wird ignoriert”.
  • Curl ist installiert und aktiviert.


    • Official Post

    Hallo,


    danke für den Reproducer. Das eigentliche Problem ist da nicht der Timeout, sondern, dass maxLength für den endlosen Stream offenbar nicht ordnungsgemäß berücksichtigt wird.


    Die Differenz zwischen 5.3.1 und 5.3.2 erklärt sich durch diesen Commit: https://github.com/WoltLab/WCF…45bb51df9a2f3834bd320cc00, der einen tatsächlichen Unterschied zwischen 5.2 und 5.3 korrigiert.

    • Official Post

    Hallo,

    Ich konnte das Problem vorübergehend durch Ändern des UA lösen. Denn scheinbar mögen die keine UAs, in denen Mozilla fehlt.

    „Mögen nicht“ ist das falsche Wort. Wenn du es mit beispielsweise HTTPie probierst, dann leitet die URL direkt auf den Audiostream. Ich nehme an, damit es bei der Verwendung im Musik-Programm der Wahl funktioniert, ohne, dass sich der Nutzer die korrekte URL heraussuchen muss.

    • Official Post

    Hallo,


    https://github.com/WoltLab/WCF…3baaaa6fa150b1732adfc9f3c


    Mit dem Commit behebt sich das Problem für mich. Es dauert aber dennoch rund 5 Sekunden, bis das Skript fertig ist. Aufgrund der Bandbreite des Streams sind die 512kB eben erst dann erreicht.


    Falls du genaue Kontrolle über den Ablauf des Requests haben möchtest, empfehle ich dir die Umstellung auf Guzzle direkt, ohne HTTPRequest dazwischen. Da kannst du dann auch den „globalen Timeout“ setzen und genau so viel Lesen wie du benötigst.