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 práctica que genera y enumera las fronteras de parte de las solicitudes. Puede utilizar estas fronteras en sus solicitudes directamente o utilizarlas como referencia.
Más abajo puede ver un ejemplo donde se valida un archivo XML con un esquema XML.
•En este ejemplo se supone que los comandos se ejecutan desde la carpeta donde residen los archivos que se deben validar (esto nos permite escribir rutas de acceso relativas sencillas para 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\XMLSpy2025\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 utiliza comillas dentro de otras comillas, éstas deben ser de dos tipos diferentes (sencillas y 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 las fronteras de parte que son necesarias para iniciar trabajos con POST. Puede usar la información de seguimiento directamente o como referencia para crear fronteras de 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: 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
|
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