2017-05-12 2 views
0

Wenn ich den folgenden Befehl ausführen, alles funktioniert super:Zugriff auf Web-Service mit Curl, in/bin/sh Skript verursacht „HTTP 415 Nicht unterstützter Medientyp“

curl -s -o /dev/null -w %{http_code} \ 
http://www.example.com/mywebservice/generic.example.com \ 
--header "Content-type: application/json" --request PUT \ 
--data '{"hostname":"generic.example.com", "project":"none", "usage":"generic", "environment":"production"}' 

Wenn ich in eine diesen Befehl setzen in den Server-Logs Variable in einem/bin/sh Skript, und führen sie es aus, erhalte ich „HTTP 415 Nicht unterstützter Medientyp“ zeigt nach oben:

#!/bin/sh 

read -d '' CMD << EOF 
curl -s -o /dev/null -w %{http_code} http://www.example.com/mywebservice/generic.example.com \ 
--header "Content-type: application/json" --request PUT \ 
--data '{"hostname":"generic.example.com", "project":"none", "usage":"generic", "environment":"production"}' 
EOF 
`$CMD` 

ich den Befehl durch den Ausdruck überprüft, und es sieht beispielsweise wie die Manuelles I:

#!/bin/sh 

read -d '' CMD << EOF 
curl -s -o /dev/null -w %{http_code} http://www.example.com/mywebservice/generic.example.com \ 
--header "Content-type: application/json" --request PUT \ 
--data '{"hostname":"generic.example.com", "project":"none", "usage":"generic", "environment":"production"}' 
EOF 
echo $CMD 

Ausgang:

curl es -o/dev/null -w% {} HTTP_CODE http://www.example.com/mywebservice/generic.example.com --header "Content-Type: application/json" --request PUT --data ‚{“ Host-Name ":" generic.example.com“, "Projekt": "none", "Nutzung": "generic", "Umwelt": "Produktion"}‘

+0

Wie sehen die Header aus (fügen Sie das '-i' Flag hinzu oder' -v' für mehr Ausführlichkeit) wenn die Anfrage gesendet wird? Ist es immer noch dasselbe? –

+0

@peeskillet -v war definitiv informativ. Auf Anhieb wurde "Content-Type: application/x-www-form-urlencoded" angezeigt, so dass der Befehl das Argument --header nicht korrekt angezeigt wurde. Ich denke, das ist ein Problem beim Setzen von Befehlen in eine Befehlszeile. Ich werde es wahrscheinlich einfach ohne eine Variable ausführen. – wsaxton

+0

Ich stieß auf das gleiche Problem, konnten Sie es @waxton herausfinden? – Masked

Antwort

1

Für mich ist es funktioniert so:

#!/bin/sh 

read -d '' CMD << EOF 
`/usr/bin/curl -s http://localhost:8080/someurl \ 
    --header "Content-type: application/json"` 
EOF 

echo $CMD 

Was ist, wenn es innerhalb von EOF bewerten?

Verwandte Themen