Testen mit CURL
Die Drittanbieter-Applikation CURL (http://curl.haxx.se/) ist ein Befehlszeilentool, mit dem Sie den POST Request testen können. CURL bietet eine sehr nützliche Trace-Option, die die Begrenzungen der einzelnen Teile von Requests generiert und auflistet und die sie direkt in Ihren Requests oder als Referenz verwendetn können.
Unten finden Sie ein Beispieltestszenario, in dem eine XML-Datei anhand eines XML-Schemas validiert wird. Für das Beispiel gelten die folgenden Annahmen:
•die unten angeführten Befehle werden von dem Ordner aus ausgeführt, in dem sich die zu validierenden Dateien befinden; (dadurch können einfache relative Pfade zu diesen Dateien verwendet werden). Wenn Sie XMLSpy von Altova installiert haben, finden Sie die in diesem Beispiel verwendeten Dateien im Ordner Examples der Applikation. Der vollständige Pfad zu diesem Ordner lautet: C:\Users\<username>\Documents\Altova\XMLSpy2025\Examples
•RaptorXML Server wird lokal am Port 8087 ausgeführt
Nähere Informationen zu den CURL-Befehlszeilenoptionen finden Sie in der Hilfe zu CURL.
Aufrufen von CURL mit dem Validierungsbefehl (unter Windows)
[input: powershell]
\path\to\curl.exe -F 'msg={\"command\": \"xsi\", \"args\":[\"additional-files:///PurchaseOrder.zip%7Czip/ipo.xml\"], \"options\":{}};type=application/json' -F "additional-files=@PurchaseOrder.zip;type=application/octet-stream" http://localhost:8087/v1/queue
Anmerkung: | Wenn in Powershell Anführungszeichen innerhalb von Anführungszeichen stehen, so müssen verschiedene Arten von Anführungszeichen (einfache/doppelte) verwendet werden. |
[input: cmd]
\path\to\curl.exe -F "msg={\"command\": \"xsi\", \"args\":[\"additional-files:///PurchaseOrder.zip%7Czip/ipo.xml\"], \"options\":{}};type=application/json" -F "additional-files=@PurchaseOrder.zip;type=application/octet-stream" http://localhost:8087/v1/queue
[output]
{"jobid": "058F9E97-CB95-43EF-AC0A-496CD3AC43A3", "result": "/v1/results/058F9E97-CB95-43EF-AC0A-496CD3AC43A3"}
Abrufen des Ergebnisses über die URL von "result"
[input]
\path\to\curl.exe http://localhost:8087/v1/results/058F9E97-CB95-43EF-AC0A-496CD3AC43A3
[output]
{"jobid":"058F9E97-CB95-43EF-AC0A-496CD3AC43A3","state":"OK","error":{},"jobs":[{"file":"additional-files:///PurchaseOrder.zip%7Czip/ipo.xml","jobid":"D4B91CB0-CF03-4D29-B563-B6506E123A06","output":{},"state":"OK","error":{}}]}
Die Trace-Option von CURL
CURL hat eine Trace-Option (--trace-ascii), die den Verlauf des HTTP-Datenaustausches mit dem Server protokolliert. Die Option ist äußerst nützlich, da sie die zum Initiieren von Aufträgen mit POST benötigten Begrenzungen auflistet. Sie können die Informationen im Trace-Protokoll entweder direkt oder als Referenz verwenden, um die Begrenzungen zu erstellen. Im Codefragment unten sehen Sie das Trace-Protokoll, das bei Ausführung des obigen Befehls aufgezeichnet wurde.
== Info: Trying ::1... == Info: Connected to localhost (::1) port 8087 (#0) => Send header, 217 bytes (0xd9) 0000: POST /v1/queue HTTP/1.1 0019: Host: localhost:8087 002f: User-Agent: curl/7.42.1 0048: Accept: */* 0055: Content-Length: 2939 006b: Expect: 100-continue 0081: Content-Type: multipart/form-data; boundary=-------------------- 00c1: ----d887ed58324015c3 00d7: <= Recv header, 23 bytes (0x17) 0000: HTTP/1.1 100 Continue => Send data, 393 bytes (0x189) 0000: --------------------------d887ed58324015c3 002c: Content-Disposition: form-data; name="msg" 0058: Content-Type: application/json 0078: 007a: {"command": "xsi", "args":["additional-files:///PurchaseOrder.zi 00ba: p%7Czip/ipo.xml"], "options":{}} 00dc: --------------------------d887ed58324015c3 0108: Content-Disposition: form-data; name="additional-files"; filenam 0148: e="PurchaseOrder.zip" 015f: Content-Type: application/octet-stream 0187: => Send data, 2498 bytes (0x9c2) 0000: PK........"..6}.c.....M.......ipo.xsd.T.N.@.}N....O 5v.}..S....( 0040: .JU/...$Y..5{.E......I*...g...Y...\....Z..~......P.A.ct....y. ... 0940: .........."..6]g......l............. .......address.xsdPK....... 0980: ..."..6I..v.................. .......ipo.xmlPK.................. 09c0: .. => Send data, 48 bytes (0x30) 0000: 0002: --------------------------d887ed58324015c3-- <= Recv header, 22 bytes (0x16) 0000: HTTP/1.1 201 Created <= Recv header, 13 bytes (0xd) 0000: Allow: POST <= Recv header, 32 bytes (0x20) 0000: Content-Type: application/json <= Recv header, 37 bytes (0x25) 0000: Date: Fri, 24 Jul 2015 16:58:08 GMT <= Recv header, 24 bytes (0x18) 0000: Server: CherryPy/3.6.0 <= Recv header, 21 bytes (0x15) 0000: Content-Length: 111 <= Recv header, 2 bytes (0x2) 0000: <= Recv data, 111 bytes (0x6f) 0000: {"jobid": "058F9E97-CB95-43EF-AC0A-496CD3AC43A3", "result": "/v1 0040: /results/058F9E97-CB95-43EF-AC0A-496CD3AC43A3"} == Info: Connection #0 to host localhost left intact
|
Anmerkung: | Anhand des obigen Codefragments sehen Sie, dass zusätzlich zu 'Content-Disposition: attachment' auch 'Content-Disposition: form-data' gültig ist. |
Aufrufen von CURL mit dem Befehl zur Überprüfung der Wohlgeformtheit (unter Linux)
/path/to/curl -F 'msg={"command": "wfxml", "args":[]};type=application/json' -F "args=@ipo.xml;type=application/octet-stream" http://localhost:8087/v1/queue
/path/to/curl -F 'msg={"command": "wfxml", "args":["additional-files:///ipo.zip%7Czip/ipo.xml"]};type=application/json' -F "additional-files=@ipo.zip;type=application/octet-stream" http://localhost:8087/v1/queue