[gelöst] Gibt es max Länge für command URLs?

Begonnen von FhemPiUser, 25 Dezember 2018, 10:54:34

Vorheriges Thema - Nächstes Thema

FhemPiUser

Hallo,

ich habe ein merkwürdiges Fehlerbild und frage mich, ob es daran liegt, dass es eine maximale Länge einer command URL gibt.

Ich möchte einen dummy per URL-Aufruf eines Sensors setzen. Dazu habe ich folgende (encoded) URL:

http://192.168.1.x:808x/fhem%3Fcmd.MeinWindsensor%3Dset%20MeinWindsensor%20WS%3A%204.00%20WR%3A%206%20B%3A%2023%20T%3A%2020.30%20D%3A%201024

Ich bekomme immer ein "Method not allowed" zurück. Wenn ich die URL kürze auf

http://192.168.1.x:808x/fhem%3Fcmd.MeinWindsensor%3Dset%20MeinWindsensor%20WS%3A%204.00%20WR%3A%206%20B%3A%2023

funktioniert es.

MadMax-FHEM

#1
Da bin ich mir praktisch sicher, dass es NICHTS mit der Länge zu tun hat.

Beide Aufrufe sind mMn Unsinn.

Weil ein set-Kommando so aussieht:

set Gerätename Wert

und (auch über Web) nicht:

Gerätename set Gerätename Wert


Hier sind einige Beispiele von Web-Cmds zu finden: https://forum.fhem.de/index.php/topic,66920.msg582889.html#msg582889

EDIT: und ja eine Begrenzung gibt es bestimmt, weil in der realen Welt Speicher immer irgendwo/wann beschränkt ist ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

FhemPiUser

Warum Unsinn? Der Wert ist ein String (z.B. "WS: 8.00 WR: 5 B: 24") aus mehreren Sensorwerten, die ich per userReadings dann zu Readings umwandle.

Klar gibt es irgendwo eine Grenze, aber meine Frage ist, ob diese im Bereich 100-250 Zeichen ist. ODer es liegt am "." im Wert...

MadMax-FHEM

#3
Schau dir halt (den Beginn) dein Kommando mal genauer an:

/fhem%3Fcmd.MeinWindsensor%3Dset

Was soll das Windsensor VOR dem set...
...das habe ich gemeint.

Weil (wie auf der verlinkten Seite zu sehen / hast du überhaupt geschaut!?) es nämlich so eher Sinn macht:

/fhem%3Fcmd%3Dset%20MeinWindsensor%20Wert...

EDIT3: ohne jetzt zu prüfen ob das '?' nach fhem bzw. das '=' nach cmd etc. von dir bereits richtig encoded wurde (wenn das überhaupt not tut)... Hab ich jetzt einfach mal angenommen/übernommen...

EDIT: die max. Länge die ein (vernünftiger) Webserver verarbeiten kann bzw. ein Browser senden kann steht bestimmt in einem RFC. Ich hab mal so gegoogelt: da passt ne ganze Menge rein... ;)  Wenn du sicher gehen willst, dass alle Zeichen korrekt "encodiert" sind, dann: urlencode verwenden.

EDIT2: oder halt auch mal die verlinkten Beispiele anschauen und anpassen. Weil die auf jeden Fall gehen (sollten).

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

FhemPiUser

danke für den Link, ich schau mir die Beispiele an.

Zu Deinen Anmerkungen: Das "MeinWindsensor vor dem =" sollte eigentlich richtig sein. Unencoded ist das:

.../fhem?cmd.MeinWindsensor=set MeinWindsensor...

Im Code nutze ich übrigens "urlencode" zum Encoden...

MadMax-FHEM

Tja wenn du meinst dass der MeinWindsensor da hin kommt...

Aber alle Besipiele die ich kenne lauten halt anders also wie geschrieben:

/fhem?cmd=set%20DeviceName%20Wert(e)

Viel Erfolg, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

FhemPiUser

ich glaube es geht beides. es gibt beispiele im netz mit ,,...?cmd.device=set device..." als auch ohne das device vor dem =

MadMax-FHEM

Zitat von: FhemPiUser am 25 Dezember 2018, 12:44:04
ich glaube es geht beides. es gibt beispiele im netz mit ,,...?cmd.device=set device..." als auch ohne das device vor dem =

Ah, sah halt nur eigenartig aus...
...und mir ist die Variante noch nicht begegnet...

Eigentlich ist ja die url "nur" sowas wie den Befehl in das FhemWebCmd eingeben...
Und da ist es (meist) halt anders...

Denke auch nicht, dass da der Fehler liegt/lag...
...ebensowenig wie bei der Länge... ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

FhemPiUser

stimmt, die länge war es nicht. der urlencoder war scheinbat schuld. manuel und minimal encoded (nur leerzeichen durch + ersetzt) und jetzt geht es.

danke

rudolfkoenig

Man sollte nur die Parameternamen bzw. Werte URL-Kodieren, hier war aber alles, insb auch die Trenner (?, & =) kodiert. Ich kriege trotz "falscher" Kodierung keine Fehlermeldung, bei mir wird die Zeile nur ignoriert, da FHEMWEB mit ?cmd nichts anfangen kann. Ich vermute im urspruenglichen Fall ist auch noch ein Apache/Nginx/etc noch dazwischen, deswegen die merkwuerdige Fehlermeldung.

Die max Länge fuer URLs ist Browserabhaengig, und ist in Bereich von Megabyte.