2016-12-22 10 views
1

Ich versuche, eine POST-Anfrage zu machen. Folgendes funktioniert ohne Probleme;Bash Curl POST-Anfrage: "-d" -Option mit einer Variablen

# Get expected response 
curl http://localhost:9020/xxx/xxxx/ -H Content-type:application/json 
-H Accept:application/json -d '{"LED":{ 
"language":"CHINESE"}, "text":"1928年11月22日"}' 

Allerdings, wenn ich versuchen, den Wert für die Option -d curl einstellen können die Anfrage an den Server nicht vor.

var="{\"LED\":{ \"language\":\"CHINESE\"}, \"text\":\"1928年11月22日\"}" 
# No Response 
curl http://localhost:9020/xxx/xxxx/ -H Content-type:application/json 
-H Accept:application/json -d $var 

Kann jemand erklären, warum letzteres scheint nicht zu arbeiten? Ich habe verschiedene Fluchtcharaktere ausprobiert, aber auch kein Glück.

Antwort

1

Sie müssen die Variablen doppelte Anführungszeichen:

curl http://localhost:9020/xxx/xxxx/ -H Content-type:application/json \ 
-H Accept:application/json -d "$var" 

Ohne die Doppel zitieren, wird der Wert auf den Felder aufgeteilt, und die Schale interpretiert, dass als mehrere zusätzlichen Argumente zu curl, aber Sie brauchen Dieser Wert soll ein einzelnes Argument sein. Das ist, was doppelte Zitate erreichen.

+0

Danke - Ich stieß auch auf diese als eine Lösung für die Übergabe einer Variablen an eine Funktion; sollte es realisiert haben! – JSB