[PATCH] - HttpUtils - Rückgabe des Status-Codes in $param, senden in HTTP/1.1

Begonnen von Markus Bloch, 31 Mai 2014, 19:01:02

Vorheriges Thema - Nächstes Thema

Markus Bloch

Hallo Rudi,

anbei findest du einen sehr kleinen Patch für HttpUtils.pm:


  • Rückgabe des HTTP-Statuscodes der Antwort im Parameter-Hash unter $param->{code} zur weiteren Auswertung
  • Senden aller Requests mit HTTP/1.1 in der Request-Line

Der erste Punkt dient der Auswertung des Statuscodes in Fällen ungleich 200 (also 401,403,404, ...). LG-TV's geben die Rückmeldung der Anfrage nur in Form von HTTP Statuscodes ohne weiteren Content an ("Content-Length: 0", siehe Diskussion mit betateilchen bei meinem letzten Fragethread).

Der zweite Punkt schmerzt dir, dass weis ich. Leider antwortet mir in meinem Fall mein LGTV erst dann, wenn HTTP/1.1 in der Request-Line steht. Bei HTTP/1.0 beendet der Server (LGTV) sofort die Verbindung. Da es im Internet mittlerweile defacto Standard ist, sehe ich persönlich hier keine Probleme HTTP/1.1 zu verwenden. Alle Module in meiner FHEM Installation die HttpUtils.pm verwenden funktionieren nachwievor ohne Probleme mit HTTP/1.1 (Weather, Twilight, YAMAHA_*)

Währe toll, wenn das eingecheckt werden könnte.

Vielen Dank

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig

Hallo Markus,

du hast recht, ueber den HTTP/1.1 bin ich nicht gluecklich, da ich nicht sicher bin, welche Seiteneffekte es hat. Weiterhin bin ich nicht ganz sicher, welche Header-Felder bei 1.1 spezifiziert werden muessen, aus dem RFC werde ich nicht ganz schlau. Ich habe aber beschlossen, dass wir dies durch die fleissigen FHEM-Tester rausfinden werden, insofern habe ich beide Aenderungen eingecheckt. Falls jemandem was auffaellt, bitte hier melden.

Gruss,
  Rudi

Markus Bloch

Vielen Dank.

Eine wesentliche Neuerung in HTTP/1.1 ist die Möglichkeit eine TCP Verbindung offen zuhalten um mehrere HTTP-Requests abzusetzen (Header-Feld: Keep-Alive). Daher würde ich vorschlagen die Zeile

Connection: Close

Generell mit aufzunehmen, da HttpUtils.pm aktuell nicht im Stande ist, eine TCP Verbindung offen zu halten für weitere Requests.

Alle HTTP Module bei mir funktionieren aber auch ohne dieser Zeile mit HTTP/1.1

Gruß

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

betateilchen

Zitat von: rudolfkoenig am 01 Juni 2014, 13:57:15
du hast recht, ueber den HTTP/1.1 bin ich nicht gluecklich, da ich nicht sicher bin, welche Seiteneffekte es hat.
...
Falls jemandem was auffaellt, bitte hier melden.

*meld*

Mit dem geänderten Modul HttpUtils funktionieren die Kalender in 57_Calender wieder mal nicht mehr.

(Ja ich habe ausführlich getestet, es ist das aktualisierte Modul HttpUtils.pm, nicht das zeitgleich geänderte 57_Calendar.pm)

Und ich bin nicht der einzige mit dem Problem:

http://forum.fhem.de/index.php/topic,24090.msg173619.html#msg173619
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: Markus Bloch am 01 Juni 2014, 14:05:54
Daher würde ich vorschlagen die Zeile
Connection: Close
Generell mit aufzunehmen,
Alle HTTP Module bei mir funktionieren aber auch ohne dieser Zeile mit HTTP/1.1

"Wir befinden uns im Jahre 2014 n.Chr. Ganz fhem ist von HttpUtils.pm besetzt... Ganz fhem? Nein! Ein von unbeugsamen Entwicklern gebautes Modul hört nicht auf, dem Eindringling Widerstand zu leisten."

Wenn man die von Markus vorgeschlagene zusätzliche Header-Zeile mit in die HttpUtils aufnimmt, funktioniert auch das Calendar-Modul wieder korrekt.


Index: HttpUtils.pm
===================================================================
--- HttpUtils.pm (revision 6033)
+++ HttpUtils.pm (working copy)
@@ -190,6 +190,7 @@

   my $hdr = "$method $hash->{path} HTTP/1.1\r\n";
   $hdr .= "Host: $hash->{host}\r\n";
+  $hdr .= "Connection: Close\r\n";
   $hdr .= "Authorization: Basic $hash->{auth}\r\n" if(defined($hash->{auth}));
   $hdr .= $hash->{header}."\r\n" if(defined($hash->{header}));
   if(defined($data)) {
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!


betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Loredo

Hi,


nach dem Update scheint etwas nicht mehr so ganz in Ordnung zu sein, so dass das ENIGMA2 Modul nicht mehr funktioniert.



2014.06.04 13:06:14 5: ENIGMA2 LR_SAT: RES ERROR powerstate - not in XML format
6a
<?xml version="1.0" encoding="UTF-8"?>
<e2powerstate>
   <e2instandby>
false   </e2instandby>
</e2powerstate>


0







Irgendwie mogelt sich da also am Anfang ein "6a" und am Ende eine "0" dazu.
Hier ist die Codestelle, an die HtmlUtils die $data Variable übergibt:
http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/FHEM/70_ENIGMA2.pm#l937


Ich sehe keinen Zusammenhang zu meinem Code. Weiß jemand, was in HttpUtils falsch läuft?




Gruß
Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig


Loredo

Zitat von: rudolfkoenig am 04 Juni 2014, 13:32:03
Update von heute?


Update heute durchgeführt, somit die Änderungen von gestern in HttpUtils eingeschlossen.
Das Problem besteht aber wohl bereits seit 2.6. (sprich dem Checkin 01.06.14 13:50).
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig


Loredo

Dann geht es wieder und die Rückmeldung sieht so aus:


2014.06.04 17:22:45 5: ENIGMA2 LR_SAT: RES powerstate
<?xml version="1.0" encoding="UTF-8"?>
<e2powerstate>
<e2instandby>
false </e2instandby>
</e2powerstate>


Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Markus Bloch

Könntest du evtl. mal einen PCAP in Wireshark mit HTTP/1.1 machen und mir oder dem Thread zur Verfügung stellen?

Vielen Dank

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Loredo

Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig

Da scheinbar manche Benutzer Probleme mit HTTP/1.1 haben (selbst mit Connection:Close), habe ich die Voreinstellung wieder auf 1.0 gesetzt. Man (d.h. der Modulautor) kann sie mit $hash->{httpversion}="1.1" selbst bestimmen, in diesem Fall wird auch automatisch "Connection: Close" zum Header hinzugefuegt.

Auf ein Neues beim testen.