FHEMWEB und FEHLER 405: Method Not Allowed.

Begonnen von kurt6908, 29 Januar 2017, 17:27:40

Vorheriges Thema - Nächstes Thema

kurt6908

Hallo,

auf Grund der Threads

https://forum.fhem.de/index.php/topic,65671.0.html
https://forum.fhem.de/index.php/topic,65665.0.html

stelle ich meine Frage hier nochmal (Developer bin ich keiner und mit RSS hat es anscheinend nichts zu tun).

Ich habe in FHEM einen RSS definiert und sende daraus ein JPG jede Stunde auf meine Homepage.

Das RSS-Bild hole ich mir mittels

wget -N --no-check-certificate --http-user=XXX --http-password=NNN https://raspberrypi:8083/fhem/rss/myrss.jpg

Seit dem letzten FEHMWEB-Update bekomme ich nun stündlich (o.g. wget wird jede Stunde über einen chron-Job aufgerufen) im FHEM-Log den Fehler

WEB_127.0.0.1_44812: unsupported HTTP method HEAD, rejecting it.

Bis dato konnte ich weder im RSS-Bereich noch im Developerbereich eine Lösung finden.

Nachdem die Fehlermeldung im Log und der Abbruch des Scriptes genau mit dem Update vom FHEMWEB gekommen ist, muss es mit diesem Modul zusammenhängen.

Nach meinen Recherchen nutzt wget immer die Header-Methode, dass kann man anscheinend nicht weglassen und gem. RFC2616 müsste ein WebServer, also hier FHEMWEB die Header-Methode auch immer unterstützen.

curl ist anscheinend auch keine Alternative, da es auch die Header-Methode benutzt.

Also was machen, damit ich mein RSS-JPEG nun auf meine Homepage bekomme?

Viele Grüße

Kurt
3* Raspberry Pi (2 über LTE/VPN), 5* Cul, 3* FS20, 4* FHT, 6* HM, Somfy, Solarlog, WMBus/EnergyCam, AVM FritzBox, 3* AVM Powerline, Alexa, Tasmota/MQTT, Rademacher DuoFern, EPEver HiPower/ModBus, go-eCharger

Dr. Boris Neubert

Keine Antwort aber ein Befund in meiner Umgebung (FHEM ist aktuell):

Derselbe wget-Befehl holt mir bei mir das JPEG-Bild ab und im Log ist kein Gemecker.

Unterschiede zu Deinem Setup:
- kein HTTPS
- keine Authentifizierung

Vielleicht hilft Dir das weiter.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

Ich habe weder mit https noch mit Auth Probleme:

% wget -N --http-user=hallo --http-password=leute -O - --no-check-certificate 'https://localhost:8443/fhem?cmd=list&XHR=1' | gzip -d
WARNING: timestamping does nothing in combination with -O. See the manual
for details.

--2017-01-29 18:46:53--  https://localhost:8443/fhem?cmd=list&XHR=1
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:8443... connected.
WARNING: cannot verify localhost's certificate, issued by 'CN=localhost,O=Internet Widgits Pty Ltd,L=F,ST=HS,C=DE':
  Self-signed certificate encountered.
HTTP request sent, awaiting response... 401 Authorization Required
Authentication selected: Basic realm="FHEM: login required"
Reusing existing connection to localhost:8443.
HTTP request sent, awaiting response... 200 OK
Length: 205 [text/plain]
Saving to: 'STDOUT'

-                               100%[========================================================>]     205  --.-KB/s   in 0s     

2017-01-29 18:46:53 (12.2 MB/s) - written to stdout [205/205]


Type list <name> for detailed info.

Global:
  global               (no definition)

FHEMWEB:
  WEB                  (Initialized)
  WEBS                 (Initialized)
  WEBS_127.0.0.1_56090 (Connected)
  WEBS_127.0.0.1_56094 (Connected)
  WEBS_127.0.0.1_56102 (Connected)

allowed:
  als                  (active)

dummy:
  utf8                 (???)

telnet:
  telnetPort           (Initialized)
  ts                   (Initialized)



Ist evtl. ein Proxy dazwischen? Oder ein Viruspruefer?

kurt6908

Hallo,

der Aufruf läuft auf dem Raspi, auf dem auch FHEM installiert ist, kein Proxy und kein Virenscanner.

Kann es nicht sein, dass es doch am RSS-Modul

https://forum.fhem.de/index.php/topic,65671.0.html

hängt, da der einzige Unterschied zu Deiner URL bei mir der Aufruf des RSS ist ?

Wenn ich bei meinem Aufruf Deine URL .../fhem?cmd=list&XHR=1 verwende, dann geht es. Die Authentifizierung und der SSL laufen problemlos. Insoweit glaube ich, dass es eher am RSS-Modul hängt.

Gruß

Kurt
3* Raspberry Pi (2 über LTE/VPN), 5* Cul, 3* FS20, 4* FHT, 6* HM, Somfy, Solarlog, WMBus/EnergyCam, AVM FritzBox, 3* AVM Powerline, Alexa, Tasmota/MQTT, Rademacher DuoFern, EPEver HiPower/ModBus, go-eCharger

rudolfkoenig

ZitatKann es nicht sein, dass es doch am RSS-Modul hängt, da der einzige Unterschied zu Deiner URL bei mir der Aufruf des RSS ist ?

Extrem unwahrscheinlich: das Problem besteht, weil ein HTTP Client eine HEAD-Anfrage an FHEMWEB stellt.
Ich gehe davon aus, dass es sich beim HTTP Client um wget hendelt. Das RSS Modul kommt erst spaeter zum Zuge: erst Methode Pruefen, dann authentifizieren, dann schauen, wer die Anfrage beantworten koennte. Du kannst versuchen ein "attr global verbose 5" Log mitzuliefern, es kann ja theoretisch sein, dass RSS indirekt FHEMWEB nochmal fragt, das faende ich aber sehr schraeg.

rudolfkoenig

Ich habe in fhem.cfg.demo WEBtablet mit HTTPS und allowed versehen.
wget -N --http-user=hallo --http-password=leute --no-check-certificate 'https://localhost:8085/fhem/rss/Display.jpg'
leifert bei mir eine "richtige" Datei.

kurt6908

Hallo,

hier mal der Log mit verbose 5 (<= hier die aus meiner Sicht relevanten Einträge, so weit ich sie verstehe):

2017.01.29 19:23:00 4: Connection accepted from WEB_127.0.0.1_45536 <=
2017.01.29 19:23:00 5: CUL/RAW: /T1C12228218
2017.01.29 19:23:00 4: CUL_Parse: CUL_0 T1C12228218 -62
2017.01.29 19:23:00 5: CUL_0: dispatch T1C122282
2017.01.29 19:23:00 4: FHTTK skipping state 02 as last similar telegram was received less than 5 (02) secs ago
2017.01.29 19:23:00 4: Connection accepted from telnetPort_127.0.0.1_54536 <=
2017.01.29 19:23:00 5: Cmd: >{BlockingStart('1009')}<
2017.01.29 19:23:00 5: Cmd: >{PRESENCE_ProcessLocalScan('WebCam_Presence|0|absent')}<
2017.01.29 19:23:00 5: PRESENCE (WebCam_Presence) - blocking scan result: WebCam_Presence|0|absent
2017.01.29 19:23:00 5: Triggering WebCam_Presence (2 changes)
2017.01.29 19:23:00 5: Starting notify loop for WebCam_Presence, 2 event(s), first is absent
2017.01.29 19:23:00 5: rg_Batteriestatus: not on any display, ignoring notify
2017.01.29 19:23:00 4: PRESENCE (WebCam_Presence) - rescheduling next check in 120 seconds
2017.01.29 19:23:00 3: WEB_127.0.0.1_45536: unsupported HTTP method HEAD, rejecting it. <=
2017.01.29 19:23:00 4: Connection closed for WEB_127.0.0.1_45536: EOF <=

Hmmm, irgendwie nicht sehr viel drinnen, obwohl auch das RSS-Modul angesprungen wurde.

Hier noch die Konsolenausgabe:

--2017-01-29 19:22:56--  https://raspberrypi2:8083/fhem/rss/myrss.jpg
Auflösen des Hostnamen »raspberrypi2 (raspberrypi2)«... 127.0.1.1
Verbindungsaufbau zu raspberrypi2 (raspberrypi2)|127.0.1.1|:8083... verbunden.
Der Zertifikat-Eigentümer paßt nicht zum Hostname »»raspberrypi2««.
HTTP-Anforderung gesendet, warte auf Antwort... 405 Method Not Allowed
2017-01-29 19:23:00 FEHLER 405: Method Not Allowed.

Gruß

Kurt
3* Raspberry Pi (2 über LTE/VPN), 5* Cul, 3* FS20, 4* FHT, 6* HM, Somfy, Solarlog, WMBus/EnergyCam, AVM FritzBox, 3* AVM Powerline, Alexa, Tasmota/MQTT, Rademacher DuoFern, EPEver HiPower/ModBus, go-eCharger

kurt6908

Hallo

ZitatIch habe in fhem.cfg.demo WEBtablet mit HTTPS und allowed versehen.

Wo gehört das "allowed" hin?

Gruß

Kurt
3* Raspberry Pi (2 über LTE/VPN), 5* Cul, 3* FS20, 4* FHT, 6* HM, Somfy, Solarlog, WMBus/EnergyCam, AVM FritzBox, 3* AVM Powerline, Alexa, Tasmota/MQTT, Rademacher DuoFern, EPEver HiPower/ModBus, go-eCharger

rudolfkoenig

 #cert Verzeichnis muss vorbereitet sein
attr WEBtablet HTTPS
define als allowed
attr als validFor WEBtablet
attr als basicAuth { $user eq "hallo" && $password eq "leute" }

kurt6908

Sorry,

jetzt steige ich aus  ???

wget geht mit Port 8083 auf das "normale" Web los. Hier meine aktuellen fhem.cfg-Einträge dafür:

attr WEB HTTPS 1
attr WEB endPlotNow 1
attr WEB hiddenroom DashboardRoom
attr WEB stylesheetPrefix dark
define allowed_WEB allowed
attr allowed_WEB basicAuth xxx
attr allowed_WEB validFor WEB

Bis auf den Unterschied, dass bei mir basicAuth base64-codiert und nicht mit z.B. { $user eq "hallo" && $password eq "leute" } ist, fällt mir kein Unterschied auf.

Kanns das sein? Da  FHEMWEB im Header (!) bei einer HTTP-Authentifizierung "WWW-Authenticate" mitteilen sollte wäre hier zumindest auch ein Bezug zur 405-Fehlermeldung bzgl. Header.

Gruß

Kurt
3* Raspberry Pi (2 über LTE/VPN), 5* Cul, 3* FS20, 4* FHT, 6* HM, Somfy, Solarlog, WMBus/EnergyCam, AVM FritzBox, 3* AVM Powerline, Alexa, Tasmota/MQTT, Rademacher DuoFern, EPEver HiPower/ModBus, go-eCharger

rudolfkoenig

Evtl. hast due eine andere wget version, ich verwende 1.16.1 Kannst du es mir curl versuchen?

rudolfkoenig

Nachtrag: ich habe wget gerade wiederholt (Befehl aus Shell-History aufgerufen), und ich kriege jetzt auch das Problem mit HEAD. Wenn das jemand erklaeren kann, dann bin ich dankbar.
Ohne die -N Option funktioniert es weiterhin. Vermutlich bedeutet -N/"time-stamping", dass es zunaechst mit HEAD geprueft wird, ob es sich lohnt die Daten abzuholen. Wenn ja, dann wird das mit FHEMWEB nicht unterstuetzt.

betateilchen

Zitat von: rudolfkoenig am 30 Januar 2017, 10:13:02
Vermutlich bedeutet -N/"time-stamping", dass es zunaechst mit HEAD geprueft wird, ob es sich lohnt die Daten abzuholen.
Wenn ja, dann wird das mit FHEMWEB nicht unterstuetzt.



       -N
       --timestamping
           Turn on time-stamping.

       --no-if-modified-since
           Do not send If-Modified-Since header in -N mode. Send preliminary
           HEAD request instead. This has only effect in -N mode.

       --no-use-server-timestamps
           Don't set the local file's timestamp by the one on the server.

           By default, when a file is downloaded, its timestamps are set to
           match those from the remote file. This allows the use of
           --timestamping on subsequent invocations of wget. However, it is
           sometimes useful to base the local file's timestamp on when it was
           actually downloaded; for that purpose, the
           --no-use-server-timestamps option has been provided.

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

kurt6908

#13
Hallo,

vielen Dank für Eure Unterstützung, jetzt geht's wieder.

Also, der Parameter -N beim wget wars. Wenn ich diesen entferne, dann tritt kein 405-Fehler mehr auf, weder im Script noch im FHEM-Log.

Durch das Entfernen von -N muss ich jetzt vorher das alte RSS-Bild mittels rm löschen, damit auch das aktuelle JPG da ist.

Insoweit sollte in der Commandref vermerkt werden, dass kein Header gesendet wird und dieses unter anderem beim wget -N, bzw. wahrscheinlich bei allen Befehlen mit Dateivergleichen, Auswirkungen hat.

Also Thread geschlossen....

aber noch ein Gedanke, der keine Antwort erwartet:  Warum funktioniert dann wget -N bei der URL .../fhem?cmd=list&XHR=1 (siehe oben)? Wird der Header nur bei "richtigen" Dateien wie JPG aber nicht bei HTML-Seiten von wget angefragt .....

Viele Grüße

Kurt
3* Raspberry Pi (2 über LTE/VPN), 5* Cul, 3* FS20, 4* FHT, 6* HM, Somfy, Solarlog, WMBus/EnergyCam, AVM FritzBox, 3* AVM Powerline, Alexa, Tasmota/MQTT, Rademacher DuoFern, EPEver HiPower/ModBus, go-eCharger