Usando cURL para cargar datos POST con archivos

Resuelto thotheolh asked hace 12 años • 11 respuestas

Me gustaría usar cURL no solo para enviar parámetros de datos en HTTP POST sino también para cargar archivos con un nombre de formulario específico. ¿Cómo debo hacer para hacer eso?

Parámetros de publicación HTTP:

userid = 12345 filecomment = Este es un archivo de imagen

Carga de archivos HTTP: Ubicación del archivo = /home/user1/Desktop/test.jpg Nombre del formulario para el archivo = imagen (corresponde a $_FILES['image'] en el lado de PHP)

Calculé parte del comando cURL de la siguiente manera:

curl -d "userid=1&filecomment=This is an image file" --data-binary @"/home/user1/Desktop/test.jpg" localhost/uploader.php

El problema que tengo es el siguiente:

Notice: Undefined index: image in /var/www/uploader.php

El problema es que estoy usando $_FILES['image'] para recoger archivos en el script PHP.

¿Cómo ajusto mis comandos cURL en consecuencia?

thotheolh avatar Oct 01 '12 12:10 thotheolh
Aceptado

Necesitas usar la -Fopción:
-F/--form <name=content> Specify HTTP multipart POST data (H)

Prueba esto:

curl \
  -F "userid=1" \
  -F "filecomment=This is an image file" \
  -F "image=@/home/user1/Desktop/test.jpg" \
  localhost/uploader.php
jimp avatar Oct 01 '2012 05:10 jimp

Capturando la identificación del usuario como variable de ruta (recomendado):

curl -i -X POST -H "Content-Type: multipart/form-data" 
-F "[email protected]" http://mysuperserver/media/1234/upload/

Capturando la identificación del usuario como parte del formulario:

curl -i -X POST -H "Content-Type: multipart/form-data" 
-F "[email protected];userid=1234" http://mysuperserver/media/upload/

o:

curl -i -X POST -H "Content-Type: multipart/form-data" 
-F "[email protected]" -F "userid=1234" http://mysuperserver/media/upload/
r1ckr avatar Jan 20 '2015 12:01 r1ckr