2017-12-21 5 views
0

Ich habe folgenden kleinen Bash-Skript:Bash Curl-Anfrage nicht zu senden komplette Parameter

TEST=$(curl -X POST -s -H "Content-type: application/json" -X POST http://$SITE/REST/v1/ -d ' 
{ 
    "Authorization":"Bearer '$TOKEN'" 
} 
' --trace-ascii /dev/stdout) 

In diesem Fall $ token = c4cc0c81e279defd4bd261e9e1550e8a1ded5JKg5

Allerdings, wenn ich die Anfrage mit --trace-ascii senden aktiviert, kann ich folgendes in der Ausgabe sehen:

{. "Authorization":"Bearer "c4cc0c81e279defd4bd261e9 0040: e1550e8a1ded5JKg5"". } 

Gibt es einen Grund, warum dies aufgeteilt wird? Wie kann ich das verhindern?

+0

Vielleicht ist die Variable 'TOKEN' bereits auf den abgeschnittenen Wert gesetzt? – Alfe

+0

Ich sehe das gleiche Problem, wenn ich Bearer c4cc0c81e279defd4bd261e9e1550e8a1ded5JKg5 im Klartext verwende. Es wird auch abgeschnitten – SnIpY

+0

Ich denke, das Problem ist auf der "$ TOKEN" auf diese Weise ist das einzige Wort nicht single zitiert $ TOKEN –

Antwort

1

Ich würde dies tun, die mit der Angabe helfen:

data=$(printf '{"Authorization":"Bearer %s"}' "$TOKEN") 
output=$(curl -s -H "Content-type: application/json" -X POST http://$SITE/REST/v1/ -d "$data" --trace-ascii /dev/stdout) 

Ich vermute, dass Sie Berechtigung als Header nicht als Daten gesendet werden müssen. Versuchen Sie diese, es ist gut lesbar

curl_opts=(
    --silent 
    --header "Content-type: application/json" 
    --header "Authorization: Bearer $token" 
    --trace-ascii - 
) 
curl "${curl_opts[@]}" -X POST -d "$other_data" "$url" 

Hinweis Sie aus der Gewohnheit ALL_CAPS_VARNAMES der Verwendung erhalten sollen: verlassen diejenigen, die als für den Shell vorbehalten.

+0

Vielen Dank! Wie würde der data printf-Teil aussehen, wenn ich zwei Schlüsselwerte übergeben müsste? – SnIpY

+0

Bei einer Bash-Eingabeaufforderung geben Sie 'help printf' ein –