send / post xml-Datei mit der curl-Befehlszeile

Wie kann ich eine XML-Datei an einen lokalen Server http: // localhost: 8080 mit curl von der Befehlszeile senden / posten?

Welchen Befehl soll ich verwenden?

   

Wenn diese Frage mit Ihren anderen Hudson-Fragen verknüpft ist, verwenden Sie den von ihnen bereitgestellten Befehl.

$ curl -X POST -d '4142430A02000' \ http://user:pass@myhost/hudson/job/_jobName_/postBuildResult 

Sie müssen es ein wenig ändern, um aus einer Datei zu lesen:

  $ curl -X POST -d @myfilename http://user:pass@myhost/hudson/job/_jobName_/postBuildResult 

Lesen Sie die Manpage . folgt einem Abstract für -d Parameter.

-d / – Daten

(HTTP) Sendet die angegebenen Daten in einer POST-Anforderung an den HTTP-Server, genau wie ein Browser, wenn ein Benutzer ein HTML-Formular ausgefüllt und die Übermittlungsschaltfläche gedrückt hat. Dies führt dazu, dass curl die Daten mit der Anwendung content-type / x-www-form-urlencoded an den Server weiterleitet. Vergleiche mit -F / – Formular.

-d / – Daten sind identisch mit –data-ascii. Um Daten rein binär zu veröffentlichen, sollten Sie stattdessen die Option –data-binary verwenden. Um den Wert eines Formularfeldes URL-encodieren zu können, können Sie –data-urlencode verwenden.

Wenn eine dieser Optionen mehrmals in derselben Befehlszeile verwendet wird, werden die angegebenen Datenelemente mit einem Trennzeichen & zusammengeführt. Wenn also ‘-d name = daniel -d skill = lousy’ verwendet wird, wird ein Post-Chunk generiert, der aussieht wie ‘name = daniel & skill = lousy’.

Wenn Sie die Daten mit dem Buchstaben @ starten, sollte der Rest ein Dateiname sein, aus dem die Daten gelesen werden sollen, oder – wenn Sie wollen, dass curl die Daten von stdin liest. Der Inhalt der Datei muss bereits URL-codiert sein. Mehrere Dateien können ebenfalls angegeben werden. Das Übertragen von Daten aus einer Datei namens “foobar” würde also mit –data @foobar erfolgen.

Von der Manpage glaube ich, dass dies die Droiden sind, nach denen du suchst:

-F/--form

(HTTP) Dadurch kann curl ein gefülltes Formular emulieren, in dem ein Benutzer die Übermittlungsschaltfläche gedrückt hat. Dies führt dazu, dass POST-Daten unter Verwendung der mehrteiligen / Formulardaten vom Inhaltstyp gemäß RFC 2388 gewellt werden. Dies ermöglicht das Hochladen von Binärdateien usw. Um den Inhaltsteil als Datei zu erzwingen, setzen Sie den Dateinamen mit einem @ -Zeichen voran.

Beispiel, um Ihre Passwortdatei an den Server zu senden, wobei “Passwort” der Name des Formularfelds ist, an dem / etc / passwd die Eingabe ist:

curl -F password=@/etc/passwd www.mypasswords.com

In deinem Fall wäre das etwas wie
curl -F file=@/some/file/on/your/local/disk http://localhost:8080

Sie können die Option –data mit Datei verwenden.

Schreiben Sie XML-Inhalt in eine Datei namens soap_get.xml und verwenden Sie den Befehl curl, um die Anfrage zu senden:

curl -X POST –header “Inhaltstyp: text / xml; charset = UTF-8” –data @ soap_get.xml your_url

Mit Jenkins 1.494 konnte ich unter Verwendung von curl mit --form Parametern eine Datei an einen Job-Parameter unter Ubuntu Linux 12.10 --form :

 curl --form name=myfileparam --form file=@/local/path/to/your/file.xml \ -Fjson='{"parameter": {"name": "myfileparam", "file": "file"}}' \ -Fsubmit=Build \ http://user:password@jenkinsserver/job/jobname/build 

Auf dem Jenkins-Server habe ich einen Job konfiguriert, der einen einzelnen Parameter akzeptiert: einen Datei-Upload-Parameter namens myfileparam .

Die erste Zeile dieses Aufrufs erstellt ein Webformular mit einem Parameter namens myfileparam (wie im Job). Sein Wert ist der Inhalt einer Datei im lokalen Dateisystem namens /local/path/to/your/file.txt . Das Präfix @ weist curl zu, eine lokale Datei anstelle des angegebenen Dateinamens zu senden.

Die zweite Zeile definiert eine JSON-Anfrage, die den Formularparametern in Zeile 1 entspricht: ein myfileparam namens myfileparam .

Die dritte Zeile aktiviert die Schaltfläche Erstellen des Formulars. Die vierte Zeile ist die Job-URL mit dem Suffix “/ build”.

Wenn dieser Aufruf erfolgreich ist, gibt curl 0 . Wenn es nicht erfolgreich ist, wird der Fehler oder die Ausnahme vom Dienst auf der Konsole ausgegeben. Diese Antwort braucht viel von einem alten Blogbeitrag, der sich auf Hudson bezieht , den ich für meine eigenen Bedürfnisse dekonstruiert und überarbeitet habe.

So können Sie XML unter Windows mithilfe der curl-Befehlszeile unter Windows POST-Nachrichten senden. Bessere Batch / .cmd Datei dafür verwenden:

 curl -i -X POST -H "Content-Type: text/xml" -d ^ "^< ?xml version=\"1.0\" encoding=\"UTF-8\" ?^> ^ ^ ^ ^Some-Param-01^ ^ ^SomePassW0rd^ ^ ^00^ ^ ^John Smith^ ^ ^9.97^ ^ ^4111111111111111^ ^ ^1118^ ^ ^123^ ^ ^1^ ^ ^Some Reference Text^ ^ ^john@smith.com^ ^ ^123.4.56.7^ ^ ^^ ^ ^^ ^ ^ ^ " "http://localhost:8080" 

Wenn Sie mehrere Header haben, möchten Sie vielleicht Folgendes verwenden:

 curl -X POST --header "Content-Type:application/json" --header "X-Auth:AuthKey" --data @hello.json Your_url 

Sie können diesen Befehl verwenden:

 curl -X POST --header 'Content-Type: multipart/form-data' --header 'Accept: application/json' --header 'Authorization: < >' -F file=@"/home/xxx/Desktop/customers.json" 'API_SERVER_URL' -k 

Wenn Sie curl unter Windows verwenden:

 curl -H "Content-Type: application/xml" -d "< ?xml version="""1.0""" encoding="""UTF-8""" standalone="""yes"""?>MeHello!" http://localhost:8080/webapp/rest/hello