415 Stimmen

POST XML-Datei über die cURL-Befehlszeile

Wie kann ich eine XML-Datei an einen lokalen Server POSTen? http://localhost:8080 cURL von der Kommandozeile aus benutzen?

Welchen Befehl soll ich verwenden?

534voto

Peter Schuetze Punkte 15915

Wenn diese Frage mit Ihren anderen Hudson-Fragen zusammenhängt, verwenden Sie den entsprechenden Befehl. Auf diese Weise mit XML aus der Befehlszeile:

$ curl -X POST -d '<run>...</run>' \
http://user:pass@myhost:myport/path/of/url

Um aus einer Datei zu lesen, müssen Sie sie ein wenig ändern:

 $ curl -X POST -d @myfilename http://user:pass@myhost:myport/path/of/url

Lesen Sie die Manpage . nach einer Zusammenfassung für -d Parameter.

-d/--data

(HTTP) Sendet die angegebenen Daten in einer POST-Anfrage an den HTTP-Server, in der gleichen Weise, wie ein Browser es tut, wenn ein Benutzer ein HTML-Formular ausgefüllt hat und die Schaltfläche "Submit" drückt. Dies wird curl die Daten an den Server weiterleiten Server unter Verwendung des Content-Typs application/x-www-form-urlencoded. Vergleiche mit -F/--form.

-d/--data ist dasselbe wie --data-ascii. Um Daten rein binär zu posten, sollten Sie stattdessen die Option --data-binary verwenden. Zur URL-Kodierung des Wertes eines Formular Feldes können Sie --data-urlencode verwenden.

Wenn eine dieser Optionen häufiger verwendet wird mehr als einmal in der gleichen Befehlszeile verwendet wird, werden die angegebenen Datenstücke mit einem trennenden &-Zeichen. So würde die Verwendung von '-d name=daniel -d skill=lousy' ein Post-Chunk erzeugt, der wie folgt aussieht Name=daniel&Fähigkeit=Lustig'.

Wenn Sie die Daten mit dem Anfangsbuchstaben @ beginnen, sollte der Rest ein Dateiname sein, um aus der die Daten gelesen werden sollen, oder - wenn Sie wollen, dass curl die Daten von stdin lesen soll. Der Inhalt der Datei muss bereits in der URL-kodiert sein. Es können auch mehrere Dateien angegeben werden. Das Einstellen von Daten aus einer Datei mit dem Namen 'foobar' würde also mit --data @foobar.

197voto

Desde el Manpage Ich glaube, das sind die Droiden, die Sie suchen:

-F/--form <name=content>

(HTTP) Damit kann curl ein ausgefülltes Formular emulieren, in dem ein Benutzer die Schaltfläche "Submit" gedrückt hat. Dies veranlasst curl, Daten unter Verwendung des Content-Type multipart/form-data gemäß RFC2388 zu POSTen. Dies ermöglicht das Hochladen von Binärdateien usw. Um zu erzwingen, dass der 'Content'-Teil eine Datei ist, stellen Sie dem Dateinamen ein @-Zeichen voran.

Beispiel, um Ihre Passwortdatei an den Server zu senden, wobei 'password' der Name des Formularfeldes ist, in das /etc/passwd eingegeben wird:

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

In Ihrem Fall würde dies also etwa so aussehen
curl -F file=@/some/file/on/your/local/disk http://localhost:8080

53voto

NgaNguyenDuy Punkte 1236

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

Schreiben Sie den Xml-Inhalt in eine Datei mit dem Namen soap_get.xml und verwenden Sie den Befehl curl, um die Anfrage zu senden:

curl -X POST --header "Content-Type:text/xml;charset=UTF-8" --data @soap_get.xml your_url

21voto

Steve HHH Punkte 12525

Mit Jenkins 1.494 konnte ich auf Ubuntu Linux 12.10 eine Datei an einen Job-Parameter senden, indem ich curl con --form Parameter:

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 Auftrag konfiguriert, der einen einzigen Parameter akzeptiert: einen Datei-Upload-Parameter namens myfileparam .

Die erste Zeile dieses Curl-Aufrufs erstellt ein Webformular mit einem Parameter namens myfileparam (derselbe wie im Auftrag); sein Wert ist der Inhalt einer Datei auf dem lokalen Dateisystem namens /local/path/to/your/file.txt . Die @ sagt curl, dass es eine lokale Datei anstelle des angegebenen Dateinamens senden soll.

Die zweite Zeile definiert eine JSON-Anforderung, die mit den Formularparametern in Zeile eins übereinstimmt: ein Dateiparameter namens myfileparam .

In der dritten Zeile wird die Schaltfläche "Erstellen" des Formulars aktiviert. Die vierte Zeile ist die URL des Auftrags mit dem Suffix "/build".

Wenn dieser Aufruf erfolgreich ist, gibt curl 0 . Ist dies nicht der Fall, wird der Fehler oder die Ausnahme des Dienstes auf der Konsole ausgegeben. Diese Antwort nimmt eine Menge von ein alter Blogeintrag über Hudson die ich dekonstruiert und für meine eigenen Bedürfnisse umgestaltet habe.

8voto

Gleb Esman Punkte 1201

Hier erfahren Sie, wie Sie unter Windows mit der Befehlszeile curl XML POSTen können. Verwenden Sie dafür besser eine Batch/.cmd-Datei:

curl -i -X POST -H "Content-Type: text/xml" -d             ^
"^<?xml version=\"1.0\" encoding=\"UTF-8\" ?^>                ^
    ^<Transaction^>                                           ^
        ^<SomeParam1^>Some-Param-01^</SomeParam1^>            ^
        ^<Password^>SomePassW0rd^</Password^>                 ^
        ^<Transaction_Type^>00^</Transaction_Type^>           ^
        ^<CardHoldersName^>John Smith^</CardHoldersName^>     ^
        ^<DollarAmount^>9.97^</DollarAmount^>                 ^
        ^<Card_Number^>4111111111111111^</Card_Number^>       ^
        ^<Expiry_Date^>1118^</Expiry_Date^>                   ^
        ^<VerificationStr2^>123^</VerificationStr2^>          ^
        ^<CVD_Presence_Ind^>1^</CVD_Presence_Ind^>            ^
        ^<Reference_No^>Some Reference Text^</Reference_No^>  ^
        ^<Client_Email^>john@smith.com^</Client_Email^>       ^
        ^<Client_IP^>123.4.56.7^</Client_IP^>                 ^
        ^<Tax1Amount^>^</Tax1Amount^>                         ^
        ^<Tax2Amount^>^</Tax2Amount^>                         ^
    ^</Transaction^>                                          ^
" "http://localhost:8080"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X