FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: matze1999 am 13 Januar 2024, 12:07:34

Titel: [gelöst] GetHttpFile für einen befehl nutzen
Beitrag von: matze1999 am 13 Januar 2024, 12:07:34
Hallo,

folgendes funktioniert im browser ohne Probleme (PTZ einer IP Cam):

http://user:pass@192.168.2.10:9080/decoder_control.cgi?command=39
Jetzt wollte ich das in fhem nutzen:

{ GetHttpFile("http://user:pass@192.168.2.10:9080","/decoder_control.cgi?command=39") }
aber da passiert nichts, nicht mal im log taucht etwas auf.

Hat jemand einen Tipp?

matze1999
Titel: Aw: GetHttpFile für einen befehl nutzen
Beitrag von: MadMax-FHEM am 13 Januar 2024, 12:15:52
Was du machst/machen willst ist doch eher GetFileFromURL?

https://wiki.fhem.de/wiki/HttpUtils#GetFileFromURL

EDIT: oder gleich IPCAM...

Gruß, Joachim
Titel: Aw: GetHttpFile für einen befehl nutzen
Beitrag von: betateilchen am 13 Januar 2024, 12:25:25
Zitat von: MadMax-FHEM am 13 Januar 2024, 12:15:52Was du machst/machen willst ist doch eher GetFileFromURL?

Das ist eigentlich egal, GetHttpFile() setzt einfach den host und den Pfad zusammen, setzt http:// davor und ruft dann GetFileFromURL() auf.

{ GetHttpFile("http://user:pass@192.168.2.10:9080","/decoder_control.cgi?command=39") }
Genau in dem oben rot markierten Textteil liegt der Fehler:

Der Teil "http://" darf bei GetHttpFile() nicht angegeben werden, sonst wird automatisch http://http://user:pass@192.168.2.10:9080 draus, was natürlich nicht funktioniert.
Titel: Aw: GetHttpFile für einen befehl nutzen
Beitrag von: matze1999 am 13 Januar 2024, 12:31:51
So



{ GetHttpFile("user:pass@192.168.2.10:9080","/decoder_control.cgi?command=35") }
passiert auch nichts, nicht mal im Log. Wenn ich das im Browser mache (mit http.. )kommt ein

.ok
zurück

matze199
Titel: Aw: GetHttpFile für einen befehl nutzen
Beitrag von: matze1999 am 13 Januar 2024, 12:43:35
ich hab mal ein

reload HttpUtils.pm
gemacht, da kommt folgendes:

Undefined subroutine &main::HttpUtils_Initialize called at fhem.pl line 2784.
matze1999
Titel: Aw: GetHttpFile für einen befehl nutzen
Beitrag von: betateilchen am 13 Januar 2024, 12:46:45
Zitat von: matze1999 am 13 Januar 2024, 12:31:51passiert auch nichts, nicht mal im Log.

Glaube ich nicht. Bei mir im Log steht:

2024.01.13 12:36:21 5: Cmd: >{ GetHttpFile("user:pass@192.168.2.10:9080","/decoder_control.cgi?command=35") }<
2024.01.13 12:36:21 4: CustomGetFileFromURL http://user:pass.168.2.10:9080/decoder_control.cgi?command=35: malformed or unsupported URL

Du siehst also, dass die Authentisierung nicht funktioniert, das @192 verschwindet einfach.

Zusatzfrage: Heißt der Befehl, den Du aufrufen willst, eigentlich 35 oder 39?

Und was im Browser kommt, ist grundsätzlich keine Basis für einen Vergleich mit einem Funktionsaufruf in den HttpUtils.pm.
Titel: Aw: GetHttpFile für einen befehl nutzen
Beitrag von: matze1999 am 13 Januar 2024, 12:57:21
Natürlich kommt was im log, wenn man das loglevel hoch setzt  :-[


2024.01.13 12:54:41 5: Cmd: >{ GetHttpFile("user:pass8@192.168.2.10:9080","/decoder_control.cgi?command=35") }<
2024.01.13 12:54:41 4: CustomGetFileFromURL http://user:pass8.168.2.10:9080/decoder_control.cgi?command=35: malformed or unsupported URL

pass8 - das Passwort hat eine "8" als letztes Zeichen

Das geht natürlich nicht, kommt der mit dem "@" nicht zurecht?

http://user:pass8.168.2.10


Ist egal ob 35, 39, es gibt 6 Positionen (33-39)

matze1999
Titel: Aw: GetHttpFile für einen befehl nutzen
Beitrag von: matze1999 am 13 Januar 2024, 13:00:35
kann das was mit urlEncode zu tun haben?

passwort hat keine sonderzeichen nur buchstaben und Zahlen

matze1999
Titel: Aw: GetHttpFile für einen befehl nutzen
Beitrag von: betateilchen am 13 Januar 2024, 13:07:22
Lustig, GetFileFromURL() geht auch nicht.

2024.01.13 13:00:35 5: Cmd: >{ GetFileFromURL("http://user:pass@192.168.2.10:9080/decoder_control.cgi?command=35") }<
2024.01.13 13:00:35 4: CustomGetFileFromURL http://user:pass.168.2.10:9080/decoder_control.cgi?command=35: malformed or unsupported URL

Aber

{ GetFileFromURL("http://user:pass"."@"."192.168.2.10:9080/decoder_control.cgi?command=35") }

funktioniert:

Cmd: >{ GetFileFromURL("http://user:pass"."@"."192.168.2.10:9080/decoder_control.cgi?command=35") }<
2024.01.13 13:02:03 5: HttpUtils url=http://user:pass@192.168.2.10:9080/decoder_control.cgi?command=35 Blocking via http
2024.01.13 13:02:07 4: HttpUtils: http://user:pass@192.168.2.10:9080/decoder_control.cgi?command=35: Can't connect(1) to http://192.168.2.10:9080: IO::Socket::INET: connect: timeout
2024.01.13 13:02:07 4: CustomGetFileFromURL http://user:pass@192.168.2.10:9080/decoder_control.cgi?command=35: Can't connect(1) to http://192.168.2.10:9080: IO::Socket::INET: connect: timeout

Zitat von: matze1999 am 13 Januar 2024, 13:00:35kann das was mit urlEncode zu tun haben?

Nein.
Titel: Aw: GetHttpFile für einen befehl nutzen
Beitrag von: JudgeDredd am 13 Januar 2024, 13:09:07
Wie wäre es denn hiermit ?:
{ GetHttpFile( 'user:pass@192.168.12.10:9080', '/decoder_control.cgi?command=39' ) }
Mit Singlequotes funktioniert es hier auch.
Titel: Aw: GetHttpFile für einen befehl nutzen
Beitrag von: betateilchen am 13 Januar 2024, 13:11:34
Ja, da bin ich nach meinem letzten (funktionierenden) Beitrag auch grade draufgekommen. Das Problem ist das @, weil perl versucht, da ein Array in den String zu basteln. Manchmal ist es so einfach...

Einfach das @ escapen, dann klappt es sogar mit GetHttpFile()

{ GetHttpFile("user:pass\@192.168.2.10:9080","/decoder_control.cgi?command=39") }
Titel: Aw: GetHttpFile für einen befehl nutzen
Beitrag von: matze1999 am 13 Januar 2024, 13:14:48
Zitat von: betateilchen am 13 Januar 2024, 13:11:34Einfach das @ escapen, dann klappt es sogar mit GetHttpFile()

{ GetHttpFile("user:pass\@192.168.2.10:9080","/decoder_control.cgi?command=39") }

das ist es, Danke!

matze1999