Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Enviar archivo por Curl metodo POST

Estas en el tema de Enviar archivo por Curl metodo POST en el foro de PHP en Foros del Web. Hola chicos, quería ver si me pueden dar una mano con esto. Estoy intentando enviar por CURL un archivo con metodo POST, les cuento el ...
  #1 (permalink)  
Antiguo 18/11/2014, 09:31
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Enviar archivo por Curl metodo POST

Hola chicos, quería ver si me pueden dar una mano con esto.

Estoy intentando enviar por CURL un archivo con metodo POST, les cuento el caso.
Lei varios códigos de la web incluso el aporte de @abimaelrc aporte file_get_contents curl http_request. Pero no logro que se envié el archivo. https://db.tt/ffxFeMlX

Este es mi código en el archivo que hace el CURL
Código PHP:
<?php
$ch 
curl_init();
$img"/var/www/html/mono.png";
$post = array('file' => '@'.$img);

curl_setopt($chCURLOPT_HEADER0);
curl_setopt($chCURLOPT_VERBOSEfalse);
curl_setopt($chCURLOPT_URL'http://localhost/TEST_CURL_UPLOAD.php');

curl_setopt($chCURLOPT_BINARYTRANSFER1);
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));
curl_setopt($chCURLOPT_POSTtrue);
curl_setopt($chCURLOPT_POSTFIELDS$post);

$r curl_exec($ch);
print_r($r);
?>
y TEST_CURL_UPLOAD.php solo tiene:

Código HTML:
Ver original
  1. <?php
  2. echo "<pre>";
  3. print_r($_GET);
  4. print_r($_POST);
  5. print_r($_FILES);
  6. echo "<hr>done";
  7. ?>

ahora para descartar, en el php.ini esta configurado para recibir archivos y el tamaño máximo (la imagen igual pesa 1.4k) y si a TEST_CURL_UPLOAD.php le envió el archivo por un <form> este me muestra el archivo en el print_r($_FILE).

El archivo puede ser leído por apache:
Código BASH:
Ver original
  1. ~ ls -l /var/www/html/mono.png
  2. -rw-r--r-- 1 megui www-data 4271 Nov 18 12:16 /var/www/html/mono.png

En el log de apache nada.

Bueno muchas gracias por el tiempo de leer y saludos a la comunidad
__________________
Mono programando!
twitter.com/eguimariano
  #2 (permalink)  
Antiguo 18/11/2014, 14:24
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Enviar archivo por Curl metodo POST

Por curiosidad ¿podrías mostrar el resultado de TEST_CURL_UPLOAD.php al momento de recibir el envío o es nuestra obligación ejecutarlo mentalmente para adivinar lo que sucede?

O mejor aún, ¿ya probaste dicho script usando un formulario para subir archivos y al menos los resultados son positivos?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 18/11/2014, 14:40
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Enviar archivo por Curl metodo POST

Hola pateketrueke,

El output de TEST_CURL_UPLOAD.php esta en esta imagen https://db.tt/ffxFeMlX

Nota: La url dice TEST_CURL.php pero el output en pantalla es el de TEST_CURL_UPLOAD.php que se muestra por el print_r($r); de dicho archivo.

Si ya realice esa prueba, lo comente por el medio:

Cita:
.....y si a TEST_CURL_UPLOAD.php le envió el archivo por un <form> este me muestra el archivo en el print_r($_FILE).
capaz no fui claro, pero si intento enviar el archivo por un formulario HTML funciona bien.

Saludos
__________________
Mono programando!
twitter.com/eguimariano
  #4 (permalink)  
Antiguo 18/11/2014, 14:46
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Enviar archivo por Curl metodo POST

Ah, vale, pues ahí tienes: nada en $_FILES como debería ser.

Perdón por no leer bien tus mensajes.

Bien, ¿en el aporte que mencionas se explica cómo subir archivos o eso lo estás sacando de tu imaginación?

Porque claramente se nota que así no se suben archivos, debes enviar un BODY (hablando a nivel de HTTP) de tipo multipart/form-data correctamente formateado así como los headers (hablando a nivel de HTTP) necesarios.

En PHP5 puedes usar CURLFile: http://php.net/manual/es/class.curlfile.php

Revisa los ejemplos de ahí mismo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 18/11/2014, 17:59
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Enviar archivo por Curl metodo POST

Cita:
Iniciado por pateketrueke Ver Mensaje
Ah, vale, pues ahí tienes: nada en $_FILES como debería ser.

Perdón por no leer bien tus mensajes.

Bien, ¿en el aporte que mencionas se explica cómo subir archivos o eso lo estás sacando de tu imaginación?

Porque claramente se nota que así no se suben archivos, debes enviar un BODY (hablando a nivel de HTTP) de tipo multipart/form-data correctamente formateado así como los headers (hablando a nivel de HTTP) necesarios.

En PHP5 puedes usar CURLFile: http://php.net/manual/es/class.curlfile.php

Revisa los ejemplos de ahí mismo.
Si en el aporte mensionan como enviar un archivo por CURL http://www.forosdelweb.com/f18/aport...4/#post3030735


Estoy probando el código desde casa y veo que funciona correctamente, debe ser un problema en la versión del PHP/Apache

Cita:
Iniciado por pateketrueke Ver Mensaje
... Porque claramente se nota que así no se suben archivos, ....
El código funciona correctamente, por que curl al ver el "@" por delante del PATH asume que es un archivo y realiza el formateo correspondiente.

Lo doy por cerrado al tema ya que el problema esta por versiones de packages y no en el codigo.

Saludos
__________________
Mono programando!
twitter.com/eguimariano

Etiquetas: curl, html, metodo, post
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:32.