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
Was du machst/machen willst ist doch eher GetFileFromURL?
https://wiki.fhem.de/wiki/HttpUtils#GetFileFromURL
EDIT: oder gleich IPCAM...
Gruß, Joachim
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.
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
ich hab mal ein
reload HttpUtils.pm
gemacht, da kommt folgendes:
Undefined subroutine &main::HttpUtils_Initialize called at fhem.pl line 2784.
matze1999
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.
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
kann das was mit urlEncode zu tun haben?
passwort hat keine sonderzeichen nur buchstaben und Zahlen
matze1999
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.
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.
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") }
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