Pruebas con CURL
La aplicación CURL (http://curl.haxx.se/) es una utilidad de la línea de comandos que puede utilizarse para probar la solicitud POST. CURL ofrece una opción de seguimiento muy útil que genera y enumera los límites de las partes de las solicitudes, que puede utilizar directamente en sus solicitudes o como referencia.
A continuación se muestra un ejemplo de una prueba en la que se valida un archivo XML con un esquema XML. Partimos de las siguientes premisas:
•los siguientes comandos se ejecutan desde la carpeta en la que se encuentran los archivos que se van a enviar para su validación (esto nos permite escribir rutas relativas simples a estos archivos). Si instaló la aplicación Altova XMLSpy, encontrará los archivos utilizados en el ejemplo en la carpeta Examples de la aplicación, cuya ubicación predeterminada es: C:\Users\<nombreUsuario>\Documents\Altova\XMLSpy2026\Examples.
•En este ejemplo se supone que RaptorXML+XBRL Server se ejecuta localmente en el puerto 8087.
Para más información sobre las opciones de la línea de comandos CURL consulte la documentación de esta aplicación.
Llamar a CURL con el comando de validación en 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
Nota: En PowerShell, si hay comillas dentro de comillas, se deben utilizar diferentes tipos de comillas (simples/dobles).
[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"}
Usar la URL de "result" para recuperar el resultado
[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":{}}]}
Opción de seguimiento de CURL
CURL ofrece la opción de seguimiento (--trace-ascii), que sigue el tráfico HTTP entrante y saliente del servidor. La opción es muy práctica porque enumera los límites de las partes que son necesarios para iniciar trabajos con POST. Puede usar la información de seguimiento directamente o como referencia para crear los límites de las partes. En el fragmento de código que aparece a continuación puede ver la información de seguimiento que se obtiene al ejecutar el comando.
== 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: Fecha: 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
|
Nota: observe que también es válido usar 'Content-Disposition: form-data' junto con 'Content-Disposition: attachment'.
Llamar a CURL con el comando well-formed-check en 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