Ver Mensaje Individual
  #12 (permalink)  
Antiguo 13/11/2011, 01:28
iovan
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 17 años, 3 meses
Puntos: 188
Respuesta: Como Recibir Parametro con Curl?

Triby ya te ha dado la solución pero no le crees por eso es que no lo quieres implementar como el te dice.

Vamos a repasar unos puntos, voy a entrar en detalles mínimos tal vez ahora si nos creas.

* urlencode()

Cita:
Iniciado por PHP.NET/urlencode
Devuelve una cadena en la que todos los caracteres no-alfanuméricos excepto -_. han sido reemplazados con un signo de porcentaje (%) seguido por dos dígitos hexadecimales y los espacios son codificados como signos de suma (+). Esta es la misma codificación usada en los datos publicados desde un formulario WWW, es decir, el mismo mecanismo usado para el tipo de medios application/x-www-form-urlencoded.
Lo que significa que si vas a usar urlencode de ésta forma:

Código PHP:
Ver original
  1. foreach ($datos as $key => $value) {
  2.     $post_str .= $key. '=' .urldecode($value).'&';
  3.    
  4. }

tendras que especificar un content-type: application/x-www-form-urlencoded.
para que sea enviado con tu solicitud http.

es decir:

Código PHP:
Ver original
  1. curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/x-www-form-urlencoded"));

Si no haces eso no te funcionará. (TU PROBLEMA)

Ahora una mejor solución es sin duda la que te propone Triby ya que no tienes que gastar memoria del disco en crear un arreglo (array), llenarlo para después recorrerlo y asignar el valor actual concatenando una cadena, etc... (Es un número tan pequeño que se dice "despreciable" pero de todas formas....)

Cita:
Iniciado por Triby
Código PHP:
Ver original
  1. curl_setopt($ch, CURLOPT_POSTFIELDS, array('post_str' => $post_str));
Y si por alguna razón eso no te funciona intenta agregar el content-type adecuado a esa solicitud. Como es POST y no necesitas ningún tipo de codificación especial utiliza: multipart/form-data

Código PHP:
curl_setopt($curlCURLOPT_HTTPHEADER, array("Content-type: multipart/form-data")); 
EJEMPLO TERMINADO:[*] Usando un array asociativo en CURLOPT_POSTFIELDS

Código PHP:
Ver original
  1. //Inicio el recurso
  2. $curl = curl_init("http://servidor.com/recurso.php");
  3.  
  4. //seto las opciones más básicas
  5. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  6. curl_setopt($curl, CURLOPT_POST, true);
  7. curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data"));
  8.  
  9. //Le meto los valores que recibo del formulario.....
  10. curl_setopt($curl, CURLOPT_POSTFIELDS, array("variable"=>$_POST['campo1']));
  11.  
  12. //Ejecuto el recurso
  13. $data = curl_exec($curl);
  14.  
  15. //Lo cierro
  16. curl_close($curl);
  17.  
  18. //Dentro de $data tengo el código fuente que genera el recurso.


Si no te funciona prueba verificando que tengas compilado curl.
Windows: http://www.desarrolloweb.com/faq/ins...php-xampp.html (LEE LA RESPUESTA DE Miguel Angel.....)
UNIX: http://energy.sdsu.edu/testhome/phpinstall.html (SALTA AL PASO 12)

Saludos

_____________________
EDITO: Acabo de ver que usas urldecode(), no entiendo. ¿Que es lo que estás recibiendo por POST o por que la decodificas??. De cualquier forma los 2 ejemplos te sirven :D
--> Y si no ve a la segunda solución y listo.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.

Última edición por iovan; 13/11/2011 a las 01:40