¿Cómo puedo enviar / publicar un archivo xml en un servidor local http: // localhost: 8080 usando curl desde la línea de comandos?
¿Qué comando debo usar?
fuente
¿Cómo puedo enviar / publicar un archivo xml en un servidor local http: // localhost: 8080 usando curl desde la línea de comandos?
¿Qué comando debo usar?
Si esa pregunta está conectada con sus otras preguntas de Hudson, use el comando que proporcionan. De esta manera con XML desde la línea de comando:
$ curl -X POST -d '<run>...</run>' \
http://user:pass@myhost:myport/path/of/url
Debe cambiarlo un poco para leerlo desde un archivo:
$ curl -X POST -d @myfilename http://user:pass@myhost:myport/path/of/url
Lee la página del manual . siguiendo un resumen para el parámetro -d.
-d / - datos
(HTTP) Envía los datos especificados en una solicitud POST al servidor HTTP, de la misma manera que lo hace un navegador cuando un usuario ha completado un formulario HTML y presiona el botón Enviar. Esto hará que curl pase los datos al servidor utilizando la aplicación de tipo de contenido / x-www-form-urlencoded. Compare con el formulario -F / -.
-d / - los datos son los mismos que --data-ascii. Para publicar datos puramente binarios, debería usar la opción --data-binary. Para codificar en URL el valor de un campo de formulario, puede usar --data-urlencode.
Si alguna de estas opciones se usa más de una vez en la misma línea de comando, las piezas de datos especificadas se fusionarán con un símbolo de separación &. Por lo tanto, el uso de '-d name = daniel -d skill = lousy' generaría un fragmento de publicación similar a 'name = daniel & skill = lousy'.
Si comienza los datos con la letra @, el resto debe ser un nombre de archivo para leer los datos o, si desea que curl lea los datos de stdin. El contenido del archivo ya debe estar codificado en URL. También se pueden especificar varios archivos. Por lo tanto, publicar datos de un archivo llamado 'foobar' se haría con --data @foobar.
Desde la página de manual , creo que estos son los droides que estás buscando:
-F/--form <name=content>
(HTTP) Esto permite que el rizo emule un formulario rellenado en el que un usuario ha presionado el botón Enviar. Esto hace que los datos de POST se doblen usando el multiparte / tipo de contenido de datos de acuerdo con RFC2388. Esto permite cargar archivos binarios, etc. Para forzar que la parte de "contenido" sea un archivo, prefije el nombre del archivo con un signo @.
Ejemplo, para enviar su archivo de contraseña al servidor, donde 'contraseña' es el nombre del campo de formulario al que / etc / passwd será la entrada:
curl -F password=@/etc/passwd www.mypasswords.com
Entonces, en su caso, esto sería algo así como
curl -F file=@/some/file/on/your/local/disk http://localhost:8080
file=@-
es útil si desea canalizar su archivo.
Puede usar la opción --data con archivo.
Escriba contenido xml en un archivo llamado es soap_get.xml y use el comando curl para enviar la solicitud:
curl -X POST --header "Content-Type: text / xml; charset = UTF-8" --data @ soap_get.xml your_url
Con 1.494 Jenkins, yo era capaz de enviar un archivo a un parámetro de trabajo en Ubuntu Linux 12.10 utilizar curl
con --form
parámetros:
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
En el servidor Jenkins, configuré un trabajo que acepta un solo parámetro: un parámetro de carga de archivo llamado myfileparam
.
La primera línea de esa llamada curl construye un formulario web con un parámetro llamado myfileparam
(igual que en el trabajo); su valor será el contenido de un archivo en el sistema de archivos local llamado /local/path/to/your/file.txt
. los@
prefijo del símbolo le dice a curl que envíe un archivo local en lugar del nombre de archivo dado.
La segunda línea define una solicitud JSON que coincide con los parámetros del formulario en la línea uno: un parámetro de archivo llamado myfileparam
.
La tercera línea activa el botón Construir del formulario. La cuarta línea es la URL del trabajo con el sufijo "/ build".
Si esta llamada es exitosa, regresa curl 0
. Si no tiene éxito, el error o la excepción del servicio se imprime en la consola. Esta respuesta toma mucho de una vieja publicación de blog relacionada con Hudson , que deconstruí y volví a trabajar para mis propias necesidades.
Aquí le mostramos cómo puede POSTAR XML en Windows usando la línea de comando curl en Windows. Mejor use el archivo por lotes / .cmd para eso:
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"
Si tiene varios encabezados, puede utilizar lo siguiente:
curl -X POST --header "Content-Type:application/json" --header "X-Auth:AuthKey" --data @hello.json Your_url
Puedes usar este comando:
curl -X POST --header 'Content-Type: multipart/form-data' --header 'Accept: application/json' --header 'Authorization: <<Removed>>' -F file=@"/home/xxx/Desktop/customers.json" 'API_SERVER_URL' -k
Si está utilizando curl en Windows:
curl -H "Content-Type: application/xml" -d "<?xml version="""1.0""" encoding="""UTF-8""" standalone="""yes"""?><message><sender>Me</sender><content>Hello!</content></message>" http://localhost:8080/webapp/rest/hello
The contents of the file must already be URL-encoded.
Los archivos XML de OP seguramente no lo son.--header "Content-Type:application/xml"
que no se espera que codifique-L
, no la use-X POST
ya que hará que la solicitud redirigida use POST también. Si solo usas -d como sugiere @Tai, esto no sucederá-d
tiras saltos de línea de los archivos. Para evitar esto, use--data-binary
en su lugar.