HTTPMOD HTTP/1.1 415 Unsupported Media Type

Begonnen von globus243, 24 Juni 2017, 19:33:25

Vorheriges Thema - Nächstes Thema

globus243

Guten Abend,

Ich habe folgenden HTTPMOD gebastelt:


define httpmod_DynDNS_IP HTTPMOD https://dyndns.blah.de/home?mode=set&hostname=blah.test.de.&hash=%%hash%% 20
attr httpmod_DynDNS_IP replacement01Mode expression
attr httpmod_DynDNS_IP replacement01Regex %%hash%%
attr httpmod_DynDNS_IP replacement01Value {gen_dyndns_hash}
...


Wenn ich nun den Wert nehme der im Internal "url" steht (also quasi die zuletzt aufgerufene URL) und diesen in einen x-beliebigen Browser einfüge, funktioniert alles wie es soll, Curl, Wget alles was eine URL aufrufen kann führt mit der URL zum gewünschten Ergebnis.
FHEMs HTTPMOD allerdings scheint ein Problem zu haben. Im Internal httpheader findet sich folgender Fehler-Text:
Zitat
HTTP/1.1 415 Unsupported Media Type Content-Type: application/json Content-Length: 37 Connection: close Date: Sat, 24 Jun 2017 17:20:42 GMT x-amzn-RequestId: xxxxxx X-Cache: Error from cloudfront Via: 1.1 xxxxxxxx.cloudfront.net (CloudFront) X-Amz-Cf-Id: xxxxxxx==

Woran könnte FHEM sich hier verschlucken? warum klappt es nicht?

PS: get(url) klappt überigens

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

globus243

Hallo amenomade,

{gen_dyndns_hash} ist ein Ausdruck in meiner 99_myUtils.pm der einen Sha256 Hash als String zurück gibt.
Dieser Part des HTTPMODS funktioniert.

amenomade

Zitat von: globus243 am 24 Juni 2017, 20:33:38
Dieser Part des HTTPMODS funktioniert.

Da bin ich bloß nicht sicher. Was soll dieses hash sein? Kann man irgendwelches Hash nutzen, oder muss man es zuerst per get abfragen, oder irgendwie aus einem Header auslesen, ähnlich wie ein sid?

Wenn Du zuerst {gen_dyndns_hash} im Kommandofeld von Fhem eingibst, und mit dem Wert ein Url bastelst, was ergibt die in einem Browser?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

globus243

ZitatWenn Du zuerst {gen_dyndns_hash} im Kommandofeld von Fhem eingibst, und mit dem Wert ein Url bastelst, was ergibt die in einem Browser?
Das gewünschte Ergebnis. Wie gesagt, die URL die der HTTPMOD versucht aufzurufen (Internal url) funktioniert, gibt man sie in einen normalen Browser ein.

amenomade

Mir fehlt natürlich die gesamte Definition des HTTPMODs, um zu raten, was das Problem wäre...

Versuch mal mit user-agent zu spielen, z.B.:
attr httpmod_DynDNS_IP requestHeader.* User-Agent: Mozilla/5.0 (Windows NT 6.0) So wird Mozilla simuliert. Andere Werte möglich.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

globus243

Hallo amenomade,

übrigens in der FHEM Konsole: {get("https://dyndns.blah.de/home?mode=set&hostname=blah.test.de.&hash=" . gen_dyndns_hash())}
führt auch zum gewünschten Ergebnis, was auch immer also schief läuft, es muss am HTTPMOD-Aufruf liegen.

Hier der Vollständige HTTPMOD:
define httpmod_DynDNS_IP HTTPMOD https://dyndns.blah.de/home?mode=set&hostname=blah.test.de.&hash=%%hash%% 20
attr httpmod_DynDNS_IP replacement01Mode expression
attr httpmod_DynDNS_IP replacement01Regex %%hash%%
attr httpmod_DynDNS_IP replacement01Value {gen_dyndns_hash}
attr httpmod_DynDNS_IP alias IP
attr httpmod_DynDNS_IP icon it_internet
attr httpmod_DynDNS_IP reading01Name IP
attr httpmod_DynDNS_IP reading01Regex (\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b)
attr httpmod_DynDNS_IP room Allgemein
attr httpmod_DynDNS_IP stateFormat IP


ZitatVersuch mal mit user-agent zu spielen, z.B.:
Werde ich nachher mal versuchen.


globus243

Zitat
ZitatVersuch mal mit user-agent zu spielen, z.B.:
Werde ich nachher mal versuchen.

Super, der Hinweis hat geholfen. Habe meinen HTTPMOD um einen User-Agent, Content-Type und Accept erweitert:

define httpmod_DynDNS_IP HTTPMOD https://dyndns.blah.de/home?mode=set&hostname=blah.test.de.&hash=%%hash%% 20
attr httpmod_DynDNS_IP replacement01Mode expression
attr httpmod_DynDNS_IP replacement01Regex %%hash%%
attr httpmod_DynDNS_IP replacement01Value {gen_dyndns_hash}
attr httpmod_DynDNS_IP requestHeader1 User-Agent: Mozilla/5.0 (Windows NT 6.0)
attr httpmod_DynDNS_IP requestHeader2 Content-Type: application/json
attr httpmod_DynDNS_IP requestHeader3 Accept: */*
attr httpmod_DynDNS_IP alias IP
attr httpmod_DynDNS_IP icon it_internet
attr httpmod_DynDNS_IP reading01Name IP
attr httpmod_DynDNS_IP reading01Regex (\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b)
attr httpmod_DynDNS_IP room Allgemein
attr httpmod_DynDNS_IP stateFormat IP