staging.inyokaproject.org

Wie Nutzer und Passwort in einem HTTP-Request per Skript mitschicken?

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

JörgZ

Anmeldungsdatum:
6. Juli 2009

Beiträge: 17

Vielleicht lesen die Skripting-Spezialisten, die mir bereits bei meiner Ausgangsfrage sehr gut weitergeholfen haben, noch mit. Sonst mache ich einen neuen Thread auf. Nun geht es um Folgendes (inhaltlich handelt es sich um Geräte aus der Hausautomation, die ich über ein Bash-Skript abfragen und steuern kann). "Normalerweise" kann man Befehle an die Geräte mit einem HTTP-Statement übertragen. Das läuft alles wunderbar, bis darauf, wenn die Geräte Passwort geschützt sind, weil dann ein Username und ein Passwort übergeben werden müssen. Als HTTP-Befehl sähe der Befehl für das Ausschalten so aus:

http://192.168.178.123/cm?user=admin&password=test&cmnd=power%200

%20 ist eine Leerstellenmaskierung. Direkt in einem Terminal eingegeben funktioniert folgende Zeile wunderbar:

curl -s http://192.168.178.123/cm?user=admin\&password=test\&cmnd=power%200

Nur, wenn ich das ganze im einem Skript aufrufe und das Ergebnis in der Variablen result speichern möchte, klappt es nicht

result=$("curl -s http://192.168.178.123/cm?user=admin\&password=test\&cmnd=power%200")

. Ein nicht Passwort geschütztes Gerät wird so eingeschaltet und das funktioniert auch im Skript:

result=$(curl -s http://192.168.178.123/cm?cmnd=power%200)

Es muss irgendwie mit dem & im user-passwort-Ausdruck zu tun haben. Wie muss ich das & maskieren, dass es richtig übergeben wird?

Moderiert von rklm:

Abgetrennt von diesem Thema, mit dem diese Frage nichts zu tun hat. Bitte keine Themen entführen - auch nicht Deine eigenen!

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Hallo!

Kann ich bei mir leider mit nichts testen ☺ Versuch es mal mit

1
result=$(curl -s "http://192.168.178.123/cm?user=admin&password=test&cmnd=power%200")

also anderen Anführungszeichen. Zu den Anführungszeichen findest du auch Infos im Bash Scripting Guide für Anfänger

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

ChickenLipsRfun2eat schrieb:

Kann ich bei mir leider mit nichts testen ☺ Versuch es mal mit

1
result=$(curl -s "http://192.168.178.123/cm?user=admin&password=test&cmnd=power%200")

also anderen Anführungszeichen.

Wobei sie nur anders gesetzt sind. Der Fehler ist hier:

JörgZ schrieb:

result=$("curl -s http://192.168.178.123/cm?user=admin\&password=test\&cmnd=power%200")

Die Anführungsstriche dürfen nicht den gesamten Text innerhalb $(...) umfassen. Sicherer ist immer, die einfachen Anführungsstriche zu verwenden - es sei denn, man muss Parameter Expansion betreiben (um z.B. den Nutzernamen oder das Passwort in die URL zu bekommen).

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7795

Und dann eben noch falsche Quotes / Escapes...

$ echo \&
&
$ echo "\&"
\&

JörgZ

(Themenstarter)

Anmeldungsdatum:
6. Juli 2009

Beiträge: 17

ChickenLipsRfun2eat schrieb:

Hallo!

Kann ich bei mir leider mit nichts testen ☺ Versuch es mal mit

1
result=$(curl -s "http://192.168.178.123/cm?user=admin&password=test&cmnd=power%200")

also anderen Anführungszeichen. Zu den Anführungszeichen findest du auch Infos im Bash Scripting Guide für Anfänger

Danke für die Antwort und die freundlichen Nackenklopfer - hast ja recht!

Antworten |