Ver Mensaje Individual
  #13 (permalink)  
Antiguo 13/11/2011, 13:06
vito25
 
Fecha de Ingreso: marzo-2008
Mensajes: 63
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Como Recibir Parametro con Curl?

Cita:
Iniciado por Triby Ver Mensaje
vito25, la primera regla para depurar un programa no es "saber como hacer que funcione", sino saber que es lo que esta pasando, donde esta el error, si te quieres saltar este paso, ten por seguro que no vas a poder solucionarlo.

Debes verificar una cosa a la vez:
1- Servidor 1 esta recibiendo los datos correctamente?
R. Esto no lo se, tu diras.

2- Servidor 1 esta enviando lo que se supone que debe enviar?
R. Lo dudo, porque creo que no has digerido lo que quieres enviar ni el como.

3. Servidor 2 esta recibiendo los datos correctamente?
R. Si en alguno de los dos puntos anteriores algo falla, no tienes que revisar todavia aqui... es ilogico!






Cita:
Iniciado por iovan Ver Mensaje
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()



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....)



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.


Gracias a los dos por la ayuda, hice varios cambios tratando de entender el problema, pero seguía sin resultados. Al final pasé parámetro por GET y funciona OK.



Muy agradecido con la ayuda.



Saludos