Zwei kurze Fragen zu HttpUtils_NonblockingGet

Begonnen von Markus Bloch, 25 Mai 2014, 18:13:18

Vorheriges Thema - Nächstes Thema

Markus Bloch

Hallo Rudi,

ich bin aktuell dabei YAMAHA_BD auf HttpUtils_NonblockingGet umzustellen. Das ganze funktioniert auch soweit sehr gut, allerdings habe ich zwei Fragen, die sich aus der Umstellung ergeben.

Erste Frage:

Aktuell werden die Parameter $err und $data, welche an die Callback-Fn zurückgegeben werden mit einem leeren String belegt, wenn sie "leer" sind. Währe es nicht besser hier ein undef zurückzugeben? Damit kann man besser prüfen via if(defined(...)) ob der jeweilige Parameter Daten enthält. Ein if($err) oder if($data) finde ich immer sehr gefährlich.

Zweite Frage:

Ich habe bei mir bei einigen HTTP Aufrufen den Fall, dass der Webserver ein 200 OK ohne Dateninhalt zurückgibt. Das ist in meinem Fall auch so erwünscht, aber das wird von HttpUtils als Fehler gemeldet: "empty content received". Ich persönlich hätte jetzt erwartet, dass in einem solchen Fall $err leer ist (also "" oder undef) und $data ebenfalls leer ist (da ja kein Content existiert). Ich würde leeren Content nicht umbedingt als Fehler einstufen. Wenn natürlich der Server einen 4xx oder 5xx Status sendet, dann sollte das natürlich in $err entsprechend gemeldet werden, aber ein 200 OK auch ohne Content ist für mich nicht umbedingt ein Fehler.

Was meinst du dazu?

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)

betateilchen

Zitat von: Markus Bloch am 25 Mai 2014, 18:13:18
aber ein 200 OK auch ohne Content ist für mich nicht umbedingt ein Fehler.

Für Dich vielleicht nicht, aber für die HTTP-Kommunikation grundsätzlich schon, denn die HTTP Meldung "200 OK" bedingt eigentlich per Definition in RFC2616, dass ein Content zurückgeliefert wird.

https://tools.ietf.org/html/rfc2616#section-10.2.1

Wenn also ein Server mit 200 OK antwortet, erwartet der Client korrekterweise einen Content. Wenn dieser nicht kommt, ist eine entsprechende Meldung, dass dies nicht passiert ist, durchaus korrekt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Markus Bloch

Ich habe gerade extra nochmal sämtliche Befehle mitgetracet. Scheint wohl doch immer eine Antwort zu geben.

Evtl. hatte ich da auch Tomaten auf den Augen :-/.

Dann währe Frage 2 ja schon geklärt.
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

ZitatWähre es nicht besser hier ein undef zurückzugeben?

Bin unsicher was besser ist. Leerstring kann man auch einfach pruefen ($err == ""), und sehe deswegen noch keinen Grund die Rueckgabewerte zu aendern.

betateilchen

Ich halte einen Leerstring auch für zuverlässiger (und eindeutiger) als ein undef.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Markus Bloch

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

aktives Mitglied des FHEM e.V. (Technik)