2011-06-20 13 views
122

Necesito hacer una solicitud POST a través de Curl desde la línea de comandos. Los datos para esta solicitud se encuentran en un archivo. Sé que a través de PUT esto podría hacerse con la opción --upload-file.Enviar solicitud POST con datos especificados en el archivo a través de Curl

curl host:port/post-file -H "Content-Type: text/xml" --data "contents_of_file" 
+0

Comprobar mi respuesta, http://stackoverflow.com/questions/6213509/send-json-post- using-php/6213693 # 6213693 –

+1

Lo siento, tal vez describí mi problema por error, necesito enviar una solicitud no a través de php-curl, sino simplemente mediante el comando curl desde la línea de comandos de linux os. – user253202

+1

Vea también [enviar/publicar archivo xml usando la línea de comando curl] (http://stackoverflow.com/questions/3007253/send-post-xml-file-using-curl-command-line). – Vadzim

Respuesta

195

Usted está buscando el argumento --data-binary:

curl -i -X POST host:port/post-file \ 
    -H "Content-Type: text/xml" \ 
    --data-binary "@path/to/file" 

En el ejemplo anterior, -i imprime todas las plataformas de corte para que pueda ver lo que está pasando, y -X POST hace explícito que esta es una publicación. Ambos pueden omitirse de manera segura sin cambiar el comportamiento en el cable. La ruta al archivo debe ir precedida de un símbolo @, de modo que curl sepa leer de un archivo.

+0

lo que debería ser el formato de '@ path/to/file' –

+0

@ ɢʜʘʂʈʀɛɔʘɴ en este caso sería' .xml' – dennismonsewicz

+18

¡la parte '@' es extremadamente importante! –

6

Si está utilizando datos del formulario para subir archivos, en la que se debe especificar un nombre de parámetro, puede utilizar:

curl -X POST -i -F [email protected] host:port/xxx

+0

¡Gracias! La 1. solución no funcionó para mí. 'parametername =' realmente me ayudó :) – Cyborg

5

Necesito hacer una petición POST a través del rizo del comando línea. Los datos para esta solicitud se encuentran en un archivo ...

Otras respuestas parecen innecesariamente complicadas. Todo lo que necesita hacer es tener el argumento --data se inicia con una @:

curl -H "Content-Type: text/xml" --data "@path_of_file" host:port/post-file 

Por ejemplo, si usted tiene los datos en un archivo llamado stuff.xml entonces usted haría algo como:

curl -H "Content-Type: text/xml" --data "@stuff.xml" host:port/post-file 

El stuff.xml nombre de archivo puede ser reemplazado por una ruta relativa o completa al archivo a utilizar: @./xml/stuff.xml, @/var/tmp/stuff.xml, ...

Cuestiones relacionadas