Seite 1 von 1

WGET Befehl Variable einsetzen

Verfasst: 28.02.2023, 16:47
von andi4822
Hallo,

ich kämpfe schon länger mit einem Problem bei einem wget Befehl. Und zwar möchte ich anstelle des "XSRF-TOKEN" den String "Key" einsetzen lassen. Leider funktioniert das aber nicht mit '"#key#"'. Das selbe gilt für die URL, die kann ich auch nicht so von der Variable übernehmen. Könnt Ihr mir sagen wo ich da einen Denkfehler habe. Liegt es an den ^^ die ich am Anfang und Ende vom Befehl habe? Aber die brauch ich, damit die "--post-data={"stationCodes": "NE=xxxxxxx"}' Funktion funktioniert. Der String key wird bei WriteLine korrekt dargestellt. Und wenn ich den key direkt in den Pfad eingebe bekomme ich auch eine Rückmeldung vom Link. Es funktioniert nur das einsetzen der Variable nicht.

Danke für eure Hilfe

Das hier funktioniert:

Code: Alles auswählen

string key = dom.GetObject("X-fusion").State();

WriteLine(key);

var url = "https://eu5.fusionsolar.huawei.com/thirdData/getStationRealKpi";

dom.GetObject("CUxD.CUX2801001:5.CMD_SETS").State(^wget --post-data='{"stationCodes": "NE=xxxxxxx"}' --timeout=5 -O - --no-check-certificate --keep-session-cookies --header=Content-Type:application/json --header=XSRF-TOKEN:x-1234 https://eu5.fusionsolar.huawei.com/thirdData/getStationRealKpi^);
dom.GetObject("CUxD.CUX2801001:5.CMD_QUERY_RET").State(1);
var stdOut = dom.GetObject("CUxD.CUX2801001:5.CMD_RETS").State();
WriteLine(stdOut);
Das hier nicht mehr

Code: Alles auswählen

string key = dom.GetObject("X-fusion").State();

WriteLine(key);

var url = "https://eu5.fusionsolar.huawei.com/thirdData/getStationRealKpi";

dom.GetObject("CUxD.CUX2801001:5.CMD_SETS").State(^wget --post-data='{"stationCodes": "NE=xxxxxxx"}' --timeout=5 -O - --no-check-certificate --keep-session-cookies --header=Content-Type:application/json --header='"#key#"' '"#url#"'^);
dom.GetObject("CUxD.CUX2801001:5.CMD_QUERY_RET").State(1);
var stdOut = dom.GetObject("CUxD.CUX2801001:5.CMD_RETS").State();
WriteLine(stdOut);

Re: WGET Befehl Variable einsetzen

Verfasst: 28.02.2023, 16:59
von Henke
Würde ich so lösen:

Code: Alles auswählen

string sKey = "XSRF-TOKEN:x-1234";
string sWget = ^wget --post-data='{"stationCodes": "NE=xxxxxxx"}' --timeout=5 -O - --no-check-certificate --keep-session-cookies --header=Content-Type:application/json --header=$sKey$ https://eu5.fusionsolar.huawei.com/thirdData/getStationRealKpi^;
sWget = sWget.Replace( "$sKey$", sKey );
WriteLine (sWget);
dom.GetObject("CUxD.CUX2801001:5.CMD_SETS").State(sWget);     
Damit erspart man sich weitere Fummelei mit "\""

Re: WGET Befehl Variable einsetzen

Verfasst: 28.02.2023, 18:22
von MichaelN
Nur zur Sicherheit : das ^ lässt sich in der Standard CCU nicht abspeichern.

Re: WGET Befehl Variable einsetzen

Verfasst: 28.02.2023, 20:34
von andi4822
Danke für den Tipp. Nur leider wird das ^ nicht mit im String mit abgelegt. Daher funktioniert die Abfrage wieder nicht 🫣. Gibt es eine Alternative für das ^?

Ich hab übrigens eine CCU 3 mit Rasperrymatic

Re: WGET Befehl Variable einsetzen

Verfasst: 28.02.2023, 20:53
von Henke
Soviel zu: "Das funktioniert..."

Code: Alles auswählen

!string sKey = "XSRF-TOKEN:x-1234";
string sKey = dom.GetObject("X-fusion").State();
string sStation = '{"stationCodes": "NE=xxxxxxx"}';
string sUrl = "https://eu5.fusionsolar.huawei.com/thirdData/getStationRealKpi";

string sWget = 'wget -q --post-data=\'$sStation$\' --timeout=5 -O - --no-check-certificate --keep-session-cookies --header=Content-Type:application/json --header=$sKey$ $sUrl$';
sWget = sWget.Replace( "$sKey$", sKey );
sWget = sWget.Replace( "$sStation$", sStation );
sWget = sWget.Replace( "$sUrl$", sUrl );
WriteLine (sWget);
string stdOut ; string stdErr;
system.Exec (sWget,&stdOut ,&stdErr);
if ( stdErr ){ WriteLine (  "Fehler: " #            stdErr );}
else
{
	WriteLine(stdOut );
}
Gibt bei mir:

Code: Alles auswählen

https://eu5.fusionsolar.huawei.com/thirdData/getStationRealKpi
{"failCode":305,"immediately":true,"message":"USER_MUST_RELOGIN"}
8)

cuxd braucht man dafür nicht.

Re: WGET Befehl Variable einsetzen

Verfasst: 01.03.2023, 07:58
von andi4822
Danke jetzt funktioniert es. Es war nur noch ein kleiner Fehler bei dir drinnen. Er hat mir immer "missing URL" hin geschrieben. Jetzt hab ich den $sURL$ nach vorne gesetzt nach dem "-O -" und jetzt funktioniert es auch bei mir.

Vielen Dank