HttpUtils.pm - \n\n als Header/Body-Trenner in der Response erlauben

Begonnen von Markus Bloch, 03 November 2015, 20:45:48

Vorheriges Thema - Nächstes Thema

Markus Bloch

Hallo zusammen,

nach langen Versuchen eine Webkamera für das Haus in dem ich wohne einzubinden (Thema: Digest Auth). Wollte ich nun weitermachen und die Kamera via IPCAM abfragen und steuern. Jedoch weigerte sich das Modul ein Bild abzufragen, trotz korrekter URL.

Nach langem suchen konnte ich die Ursache finden.

Bei einem manuellen Aufruf der URL mit GetFileFromURL() wurde als Ergebnis der HTTP-Header und Body ausgegeben, was natürlich nicht sein sollte. Die HTTP-Antwort, welche das JPEG-Bild ausliefert trennt den HTTP-Header und Body nur mit "\n\n" anstatt "\r\n\r\n" aufgrund dessen, wird der Body in HttpUtils.pm nicht korrekt erkannt. Aktuell sieht das folgendermaßen aus.

Zeile 415
  $ret=~ s/(.*?)\r\n\r\n//s; # Not greedy: switch off the header.

Daher meine Frage, ob man dies folgendermaßen ändern kann.

Zeile 415
  $ret=~ s/(.*?)(?:\r\n|\n){2}//s; # Not greedy: switch off the header.

Jenachdem was zuerst gefunden wird (\r\n\r\n oder \n\n), wird der Header entsprechend abgeschnitten, da die Quantifizierer für den Header nicht gierig sind. Das ganze funktioniert bei mir problemlos mit sämtlichen HTTP-Geräten sowie auch mit der IP-Kamera, welche das Problem verursachte.

Wäre toll, wenn man das aufnehmen würde.

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

Ich habe eine leicht andere Variante eingecheckt:
$ret=~ s/(.*?)\r?\n\r?\n//s; # Not greedy: switch off the header.
kannst du das bitte probieren?

Markus Bloch

Hallo Rudi,

ja das funktioniert auch. Ist mir im Nachhinein auch eingefallen, dass es mit dem ?-Quantifizierer einfacher gehen würde. Da ich den fast nie brauche, habe ich da auch nicht mehr dran gedacht.

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)

Markus Bloch

Müsste dass dann nicht auch in Zeile 336 noch nachgezogen werden?

  return 0 if($ret !~ m/^(.*?)\r\n\r\n(.*)$/s);
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