HTTPMOD liefert "Müll" statt XML

Begonnen von Kharim, 07 Januar 2024, 13:39:56

Vorheriges Thema - Nächstes Thema

Kharim

Hi ihr,

wahrscheinlich bin ich einfach zu doof, aber wo ist mein Fehler?

XML - Ein  Stück einer EPG-Abfrage
<!-- by DVBViewer Recording service -->
<epg Ver="1">
<programme start="20240111222500" stop="20240111233000" channel="545362718085475">
<eventid>55371</eventid>
<content>20</content>
<charset>255</charset>
<titles>
</titles>
<events>
</events>
<descriptions>
<description>
Katjana Gerz, Chris Tall und Simon Pearce können nur darüber staunen, wie Hella von Sinnen mit Wigald Boning eine flotte Sohle aufs Parkett legt. Können sie dadurch herausfinden, was es mit dem ?Japan-Griff? auf sich hat?
</description>
</descriptions>
</programme>
<programme start="20240111233000" stop="20240112003000" channel="545362718085475">
<eventid>55372</eventid>
<content>20</content>
<charset>255</charset>
<titles>
<title>Genial daneben</title>
</titles>
<events>
<event>Was ist eine 'Wurstkatastrophe'?</event>
</events>
<descriptions>
<description>

FHEM Log
2024.01.07 13:28:57 5: EPG_Suche: get called with Genial_daneben
2024.01.07 13:28:57 5: EPG_Suche: get found option Genial_daneben in attribute get01Name
2024.01.07 13:28:57 4: EPG_Suche: get will now request Genial_daneben, no optional value
2024.01.07 13:28:57 5: EPG_Suche: AddToQueue adds type get01 to URL http://192.168.100.20:8089/api/epg.html?lvl=2&search=Genial%20daneben, no data, no headers, retry 0, initial queue len: 0
2024.01.07 13:28:57 5: EPG_Suche: HandleSendQueue called from HTTPMOD::AddToSendQueue, qlen = 1
2024.01.07 13:28:57 4: EPG_Suche: HandleSendQueue sends get01 with timeout 2 to http://192.168.100.20:8089/api/epg.html?lvl=2&search=Genial%20daneben, No Data, No Header
2024.01.07 13:28:57 5: EPG_Suche: ReadCallback called from __ANON__
2024.01.07 13:28:57 4: EPG_Suche: Read callback: request type was get01 retry 0,
header: HTTP/1.0 200 OK
Content-Type:  text/xml; charset="utf-8"
Content-Length: 616
Content-Encoding: deflate, body length 614
2024.01.07 13:28:57 5: EPG_Suche: Read callback: body
�n�@␐�_e��S��NM�p␜�␔␅�␒D␄���;���w��u
}␞��Soy1Ʈ�␚�@EHH���␝�|��~␚9���5l���f␖D�04��ʔ�����8�y�>␙���3�^�\(�B�w�[�n�Cڪ␜a4�RlJ�@�@A�6dK␒u�� ?␋�0>␌�(��8 9��g�N�ΚW�␘Գ 9L����8<N␎�␒��[4^�,I�GQ:�;��5��Y␜���}�q�!␛����!��ktÚ-�(�A
��h�ɭuXݐ�n���r␞$���h�{q&␚aF␋REqk�␏Ue�ʾ␒]N��,��);␗��0␂␖H�␇�"���␚Z#a�jk`��X���+kb�������K`U[6␞��Bx�Z␋ز�J�Wk�a�J�%�X�5
�A(��␞ae+� ���R�␆�␇��␟����qL)dKy␅␕�h]��쳱
���␒k���`�Ed��Gx���k�N���;␟�Be�b␏�8␌␟�J��P�5�Ecݒ�␛��d�
��S��␛����gd��%Vܸ�␃�hß[S�lL�2 ��␟��TYǗ:ND��6�(�w~K�}q�;̒���\�yk��O�V+�␒��|����T�N�<��U�@,�5␜#�ƜI�␈�5��␃��CdYI␇+␖��[[��Q3�␛�<l�<��E�4z␜0�␃�w␃��<␎��s�L��&�␆
2024.01.07 13:28:57 4: EPG_Suche: BodyDecode found no charset header (bodyDecode was set to auto)
2024.01.07 13:28:57 5: EPG_Suche: InitParsers: XPath-Strict parsing done.
2024.01.07 13:28:57 5: EPG_Suche: GetCookies is looking for Cookies
2024.01.07 13:28:57 5: EPG_Suche: ExtractSid called, context get, num 01
2024.01.07 13:28:57 4: EPG_Suche: checking for redirects, code=200, ignore=0
2024.01.07 13:28:57 4: EPG_Suche: no redirects to handle
2024.01.07 13:28:57 5: EPG_Suche: Read callback sets LAST_REQUEST to get01
2024.01.07 13:28:57 5: EPG_Suche: CheckAuth decided no authentication required
2024.01.07 13:28:57 5: EPG_Suche: ExtractReading for context get, num 01 - no individual parse definition
2024.01.07 13:28:57 5: EPG_Suche: UpdateReadingList created list of reading.* nums to parse during getUpdate as 01
2024.01.07 13:28:57 5: EPG_Suche: Read starts parsing response to get01 with defined readings: 01
2024.01.07 13:28:57 5: EPG_Suche: ExtractReading reading01 with XPath-Strict /epg[@Ver="1"]//programme[1]@start
2024.01.07 13:28:57 3: EPG_Suche: error in find for XPathStrictNodeset:
not well-formed (invalid token) at line 1, column 0, byte 0:
�n�@␐�_e��S��NM�p␜�␔␅�␒D␄���;���w��u
^
}␞��Soy1Ʈ�␚�@EHH���␝�|��~␚9���5l���f␖D�04��ʔ�����8�y�>␙���3�^�\(�B�w�[�n�Cڪ␜a4�RlJ�@�@A�6dK␒u�� ?␋�0>␌�(��8 9��g�N�ΚW�␘Գ 9L����8<N␎�␒��[4^�,I�GQ:�;��5��Y␜���}�q�!␛����!��ktÚ-�(�A
��h�ɭuXݐ�n���r␞$���h�{q&␚aF␋REqk�␏Ue�ʾ␒]N��,��);␗��0␂␖H�␇�"���␚Z#a�jk`��X���+kb�������K`U[6␞��Bx�Z␋ز�J�Wk�a�J�%�X�5
 at /usr/lib/arm-linux-gnueabihf/perl5/5.28/XML/Parser.pm line 187.

2024.01.07 13:28:57 5: EPG_Suche: ExtractReading reading01 did not match
2024.01.07 13:28:57 4: EPG_Suche: Read response to get01 didn't match any Reading
2024.01.07 13:28:57 5: EPG_Suche: HandleSendQueue called from HTTPMOD::ReadCallback, qlen = 0
2024.01.07 13:28:57 5: EPG_Suche: HandleSendQueue found no usable entry in queue
Das hier unleserliche scheint der Inhalt - Suche ich nach einem nicht findbaren "Wort", provoziere also ein Leerergebnis, fehlt dies.

Das Device
ZitatInternals:
   BUSY       0
   DEF        http://IP:8089/api/epg.html?lvl=2&search=Genial%20daneben 0
   FUUID      659a96b3-f33f-8ab7-acf0-da8380d57f0055cf
   Interval   0
   MainURL    http://IP:8089/api/epg.html?lvl=2&search=Genial%20daneben
   ModuleVersion 4.1.16 - 4.4.2023
   NAME       EPG_Suche
   NOTIFYDEV  global
   NR         500
   NTFY_ORDER 50-EPG_Suche
   STATE      ???
   TYPE       HTTPMOD
   value     
   HttpUtils:
     NAME       
     addr       http://IP:8089
     auth       0
     buf       
     code       200
     compress   1
     conn       
     data       
     displayurl http://IP:8089/api/epg.html?lvl=2&search=Genial%20daneben
     header     
     host       IP
     httpheader HTTP/1.0 200 OK
Content-Type:  text/xml; charset="utf-8"
Content-Length: 616
Content-Encoding: deflate
     httpversion 1.0
     hu_blocking 0
     hu_filecount 1
     hu_port    8089
     hu_portSfx :8089
     ignoreredirects 1
     loglevel   4
     path       /api/epg.html?lvl=2&search=Genial%20daneben
     protocol   http
     redirects  0
     timeout    2
     url        http://IP:8089/api/epg.html?lvl=2&search=Genial%20daneben
     sslargs:
   QUEUE:
   READINGS:
   REQUEST:
     context    get
     data       
     header     
     ignoreredirects 0
     num        01
     retryCount 0
     type       get01
     url        http://IP:8089/api/epg.html?lvl=2&search=Genial%20daneben
     value     
Attributes:
   get01Encode UTF-8
   get01Name  Genial_daneben
   get01URL   http://IP:8089/api/epg.html?lvl=2&search=Genial%20daneben
   reading01Encode UTF-8
   reading01XPath-Strict /epg[@Ver="1"]//programme[1]@start
   room       TV
   userattr   get01Encode get01Name get01URL reading01Encode reading01XPath-Strict set01URL
   verbose    5

Danke,
Kharim
Raspberry Pi 2 + Minibian + 2x MAX Cube CUN (868/433Mhz) + Thermostate + Fensterkontakte + Taster+RGB-LED Band über pigpiod + TFA Sensoren 30.3169/3125
Raspberry Pi 2 + Minibian +Z-Wave (USB) + Bewegungsmelder + Fensterkontakt + Sirene + SMS Steuer-/Benachrichtigung (ohne Internet)

KyleK

Der Server schickt mit ,,deflate" gepackte Daten.
Mir scheint httpmod kann damit nicht umgehen?

Probiere mal einen Header für das request zu setzen
Accept-Encoding: gzip

Oder Kompression zu deaktivieren mit:
Accept-Encoding: identity
FHEM on Futro S940
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

Kharim

Meinst du das Attribut "get01Encode" ?
Leider mit beiden Varianten kein Erfolg....
Raspberry Pi 2 + Minibian + 2x MAX Cube CUN (868/433Mhz) + Thermostate + Fensterkontakte + Taster+RGB-LED Band über pigpiod + TFA Sensoren 30.3169/3125
Raspberry Pi 2 + Minibian +Z-Wave (USB) + Bewegungsmelder + Fensterkontakt + Sirene + SMS Steuer-/Benachrichtigung (ohne Internet)

KyleK

@Kharim,
nein, das muss als Header gesendet werden:

attr EPG_Suche requestHeader Accept-Encoding: gzip
FHEM on Futro S940
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

Kharim

Hi,

leider das auch ohne Änderung des verhalten....
header: HTTP/1.0 200 OK
Content-Type:  text/xml; charset="utf-8"
Content-Length: 616
Content-Encoding: deflate, body length 614
2024.01.10 15:38:44 5: EPG_Suche: Read callback: body
�n�@�_e��S��NM�p��D���;���w��u
}��Soy1Ʈ��@EHH����|�~9��5l���fD�04��ʔ�����8�y�>���3�^�\(�B�w�[�n�Cڪa4�RlJ�@�@A�6dKu�� ?�0>�(��8 9��g�N�ΚW�Գ 9L����8<N���[4^�,I�GQ:�;��5��Y���}�q�!����!��ktÚ-�(�A
��h�ɭuXݐ�n���r$���h�{q&aFREqk�Ue�ʾ]N��,��);��0H��"���Z#a�jk`��X���+kb�������K`U[6��Bx�Zز�J�Wk�a�J�%�X�5
�A(��ae+� ���R��������qL)dKy�h]��쳱
���k���`�Ed��Gx���k�N���;�Be�b�8�J��P�5�Ecݒ���d�
��S������gd��%Vܸ��hß[S�lL�2 ����TYǗ:ND��6�(�w~K�}q�;̒���\�yk��O�V+���|����T�N�<��U�@,�5#�ƜI��5����CdYI+��[[��Q3��<l�<��E�4z0��w��<��s�L�&�
2024.01.10 15:38:44 4: EPG_Suche: BodyDecode found no charset header (bodyDecode was set to auto)
2024.01.10 15:38:44 5: EPG_Suche: InitParsers: XPath-Strict parsing done.
2024.01.10 15:38:44 5: EPG_Suche: GetCookies is looking for Cookies
2024.01.10 15:38:44 5: EPG_Suche: ExtractSid called, context get, num 01
2024.01.10 15:38:44 4: EPG_Suche: checking for redirects, code=200, ignore=0
2024.01.10 15:38:44 4: EPG_Suche: no redirects to handle
2024.01.10 15:38:44 5: EPG_Suche: Read callback sets LAST_REQUEST to get01
2024.01.10 15:38:44 5: EPG_Suche: CheckAuth decided no authentication required
2024.01.10 15:38:44 5: EPG_Suche: ExtractReading for context get, num 01 - no individual parse definition
2024.01.10 15:38:44 5: EPG_Suche: Read starts parsing response to get01 with defined readings: 01
2024.01.10 15:38:44 5: EPG_Suche: ExtractReading reading01 with XPath-Strict /epg[@Ver="1"]//programme[1]@start
2024.01.10 15:38:44 3: EPG_Suche: error in find for XPathStrictNodeset:
not well-formed (invalid token) at line 1, column 0, byte 0:
�n�@�_e��S��NM�p��D���;���w��u
^
}��Soy1Ʈ��@EHH����|�~9��5l���fD�04��ʔ�����8�y�>���3�^�\(�B�w�[�n�Cڪa4�RlJ�@�@A�6dKu�� ?�0>�(��8 9��g�N�ΚW�Գ 9L����8<N���[4^�,I�GQ:�;��5��Y���}�q�!����!��ktÚ-�(�A
��h�ɭuXݐ�n���r$���h�{q&aFREqk�Ue�ʾ]N��,��);��0H��"���Z#a�jk`��X���+kb�������K`U[6��Bx�Zز�J�Wk�a�J�%�X�5
 at /usr/lib/arm-linux-gnueabihf/perl5/5.28/XML/Parser.pm line 187.

2024.01.10 15:38:44 5: EPG_Suche: ExtractReading reading01 did not match
2024.01.10 15:38:44 4: EPG_Suche: Read response to get01 didn't match any Reading
2024.01.10 15:38:44 5: EPG_Suche: HandleSendQueue called from HTTPMOD::ReadCallback, qlen = 0
2024.01.10 15:38:44 5: EPG_Suche: HandleSendQueue found no usable entry in queue

2024.01.10 15:38:44 4: EPG_Suche: BodyDecode found no charset header (bodyDecode was set to auto)

Heißt das, dass die Einstellung gar nicht greift?

LG
Kharim
Raspberry Pi 2 + Minibian + 2x MAX Cube CUN (868/433Mhz) + Thermostate + Fensterkontakte + Taster+RGB-LED Band über pigpiod + TFA Sensoren 30.3169/3125
Raspberry Pi 2 + Minibian +Z-Wave (USB) + Bewegungsmelder + Fensterkontakt + Sirene + SMS Steuer-/Benachrichtigung (ohne Internet)

betateilchen

#5
Naja, wenn Du doch in der Antwort lesen kannst, dass der content als

"deflate" kommt, hilft es wenig, wenn Du der Seite mitteilst, dass Du gzip akzeptierst.

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

KyleK

Es wurde ja vorher schon als ,,deflate" gesendet.

Mir scheint httpmod kann ,,deflate" nicht?
FHEM on Futro S940
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

KyleK

#7
Ist die Compress::Zlib Bibliothek installiert?

https://github.com/mhop/fhem-mirror/blob/2ddb766c2d41861e419f2550a672a5b587ebc193/fhem/FHEM/HttpUtils.pm#L407

Edit: Ne, das kann's auch nicht sein: laut deinem list oben ist compress auf 1 gesetzt. Kompression sollte also funktionieren.

Ich vermute mal das ist ein lokal bei dir laufender Server?
Oder kann man den auch öffentlich erreichen?
FHEM on Futro S940
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

betateilchen

Zitat von: KyleK am 10 Januar 2024, 19:42:56Es wurde ja vorher schon als ,,deflate" gesendet.

ja, Du hast recht. Ich habe falschrum gedacht :)

Zitat von: KyleK am 10 Januar 2024, 19:42:56Mir scheint httpmod kann ,,deflate" nicht?

offenbar doch:

    if($hash->{httpheader} =~ /^Content-Encoding: deflate/mi) {
      eval { my $i =  Compress::Zlib::inflateInit();
             my $out = $i->inflate($ret);
             $ret = $out if($out) };
      return ($@, $ret) if($@);
    }
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Kharim

Zitat von: KyleK am 10 Januar 2024, 19:51:19Ist die Compress::Zlib Bibliothek installiert?

https://github.com/mhop/fhem-mirror/blob/2ddb766c2d41861e419f2550a672a5b587ebc193/fhem/FHEM/HttpUtils.pm#L407

Edit: Ne, das kann's auch nicht sein: laut deinem list oben ist compress auf 1 gesetzt. Kompression sollte also funktionieren.

Ich vermute mal das ist ein lokal bei dir laufender Server?
Oder kann man den auch öffentlich erreichen?

Es ist ein lokaler Server einer etwas in die Jahre gekommenen TV-Software (DVBViewer + RecordingService) über dessen API ich per Link eine EPG_Suche auslöse.
Da mein Fhem in einer Debian-Docker-Umgebung läuft war das Paket nicht installiert.
Samt Abhängigkeiten getan - Das Ergebnis bleibt leider gleich -_-
Raspberry Pi 2 + Minibian + 2x MAX Cube CUN (868/433Mhz) + Thermostate + Fensterkontakte + Taster+RGB-LED Band über pigpiod + TFA Sensoren 30.3169/3125
Raspberry Pi 2 + Minibian +Z-Wave (USB) + Bewegungsmelder + Fensterkontakt + Sirene + SMS Steuer-/Benachrichtigung (ohne Internet)

Aurel_B

Frage: was wird an Headern hin- und her geschickt wenn du die XML z.B. im Browser aufrufst? Klappt es mit wget etc?

Kharim

"wget" auf den Link und ein "cat" auf die Datei gibt mir lesbaren Inhalt zurück.
Kanns nur gerade hier nicht einkopieren - nötig?
Raspberry Pi 2 + Minibian + 2x MAX Cube CUN (868/433Mhz) + Thermostate + Fensterkontakte + Taster+RGB-LED Band über pigpiod + TFA Sensoren 30.3169/3125
Raspberry Pi 2 + Minibian +Z-Wave (USB) + Bewegungsmelder + Fensterkontakt + Sirene + SMS Steuer-/Benachrichtigung (ohne Internet)

Aurel_B

Für mich nicht, mich würden eher die Header interessieren (z.B. Firefox -> Untersuchen -> Netzwerkanalyse). Unterscheiden sich die in der Anfrage und Antwort in Firefox versus FHEM HTTPMOD?

Wernieman

wget und curl können Header auch Anzeigen ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Kharim

Firefox
GET

scheme
http
host
192.168.100.20:8089
filename
/api/epg.html
lvl
2
search
Genial daneben
Adresse
192.168.100.20:8089
Status
200
OK
VersionHTTP/1.1
Übertragen1,34 kB (1,23 kB Größe)
Anfrage-PrioritätHighest


Connection
Keep-Alive
Content-Length
1229
Content-Type
text/xml; charset="utf-8"

Accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Encoding
gzip, deflate
Accept-Language
de,en-US;q=0.7,en;q=0.3
Connection
keep-alive
Cookie
lastpage=epg_search.html%3Faktion%3Depg_search
Host
192.168.100.20:8089
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0

wget
wget --server-response -qO /dev/null "http://192.168.100.20:8089/api/epg.html?lvl=2&search=Genial%20daneben"
  HTTP/1.1 200 OK
  Content-Type:  text/xml; charset="utf-8"
  Connection: Keep-Alive
  Content-Length: 1229

curl
curl -I "http://192.168.100.20:8089/api/epg.html?lvl=2&search=Genial%20daneben"
HTTP/1.1 200 OK
Content-Type:  text/xml; charset="utf-8"
Content-Length: 1229
Raspberry Pi 2 + Minibian + 2x MAX Cube CUN (868/433Mhz) + Thermostate + Fensterkontakte + Taster+RGB-LED Band über pigpiod + TFA Sensoren 30.3169/3125
Raspberry Pi 2 + Minibian +Z-Wave (USB) + Bewegungsmelder + Fensterkontakt + Sirene + SMS Steuer-/Benachrichtigung (ohne Internet)