Foros del Web » Programando para Internet » PHP »

Como Recibir Parametro con Curl?

Estas en el tema de Como Recibir Parametro con Curl? en el foro de PHP en Foros del Web. Hola, Tengo dos servidores y necesito enviar un parámetro desde servidor 1 a servidor 2 para que procese el parámetro. Desde servidor 1 envío un ...
  #1 (permalink)  
Antiguo 12/11/2011, 20:26
 
Fecha de Ingreso: marzo-2008
Mensajes: 63
Antigüedad: 16 años, 1 mes
Puntos: 0
Como Recibir Parametro con Curl?

Hola,


Tengo dos servidores y necesito enviar un parámetro desde servidor 1 a servidor 2 para que procese el parámetro.


Desde servidor 1 envío un parámetro mediante un formulario que es el siguiente código:



Código PHP:
<?php
$datos 
= array();
$datos['token']= $_POST['token'];
$post_str '';

foreach (
$datos as $key => $value) {
    
$post_str .= $key'=' .urldecode($value).'&';
    
}

$post_str =substr($post_str0, -1);

$ch curl_init();
curl_setopt($chCURLOPT_URL'http://servidor2/recibir.php');
curl_setopt($chCURLOPT_POSTTRUE);
curl_setopt($chCURLOPT_POSTFIELDS$post_str);
curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);

$response curl_exec($ch);

curl_close($ch);
?>

Mi duda es como recibir dicho parametro en Servidor 2 en este caso "'http://servidor2/recibir.php'"


Alguna idea ?
  #2 (permalink)  
Antiguo 12/11/2011, 20:49
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Como Recibir Parametro con Curl?

El valor para CURLOPT_POSTFIELDS debe ser array asociativo, no cadena.

Código PHP:
Ver original
  1. curl_setopt($ch, CURLOPT_POSTFIELDS, array('post_str' => $post_str));

Ante cualquier duda, no temas recurrir al manual, es muy efectivo: http://php.net/manual/es/function.curl-setopt.php
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 12/11/2011, 20:52
 
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 vito25 Ver Mensaje
Hola,


Tengo dos servidores y necesito enviar un parámetro desde servidor 1 a servidor 2 para que procese el parámetro.


Desde servidor 1 envío un parámetro mediante un formulario que es el siguiente código:



Código PHP:
<?php
$datos 
= array();
$datos['token']= $_POST['token'];
$post_str '';

foreach (
$datos as $key => $value) {
    
$post_str .= $key'=' .urldecode($value).'&';
    
}

$post_str =substr($post_str0, -1);

$ch curl_init();
curl_setopt($chCURLOPT_URL'http://servidor2/recibir.php');
curl_setopt($chCURLOPT_POSTTRUE);

curl_setopt($chCURLOPT_POSTFIELDS, array('post_str' => $post_str));

curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);

$response curl_exec($ch);

curl_close($ch);
?>

Mi duda es como recibir dicho parametro en Servidor 2 en este caso "'http://servidor2/recibir.php'"


Alguna idea ?
  #4 (permalink)  
Antiguo 12/11/2011, 20:53
 
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
El valor para CURLOPT_POSTFIELDS debe ser array asociativo, no cadena.

Código PHP:
Ver original
  1. curl_setopt($ch, CURLOPT_POSTFIELDS, array('post_str' => $post_str));

Ante cualquier duda, no temas recurrir al manual, es muy efectivo: http://php.net/manual/es/function.curl-setopt.php
Gracias por la correción,


Pero sigo con la duda, como recibo el parámetro en servidor 2

intente con:

Código PHP:
$input $_POST['post_str']; 

Pero no funciona
  #5 (permalink)  
Antiguo 12/11/2011, 20:56
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Como Recibir Parametro con Curl?

Verifica que es lo que estas enviando en servidor 1 y lo que recibes en servidor 2:

Código PHP:
Ver original
  1. // En # 1
  2. var_dump($post_str);
  3.  
  4. // En # 2
  5. var_dump($_POST);

Con eso sabras el contenido y tipo de dato de cada variable.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 12/11/2011, 21:02
 
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
Verifica que es lo que estas enviando en servidor 1 y lo que recibes en servidor 2:

Código PHP:
Ver original
  1. // En # 1
  2. var_dump($post_str);
  3.  
  4. // En # 2
  5. var_dump($_POST);

Con eso sabras el contenido y tipo de dato de cada variable.

Servidor 1 está enviado

Código PHP:
string(10"token=test" 
Y en servidor 2 donde quiero recibir no llega nada

Código PHP:
<?php

$input 
var_dump($_POST);
    
$link Conectarse();


mysql_query("INSERT INTO datos (dato) VALUES ('$input')"$link); 


mysql_close($link); 

 
?>
Alguna idea, que estoy haciendo mal ?
  #7 (permalink)  
Antiguo 12/11/2011, 21:08
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Como Recibir Parametro con Curl?

Bueno, var_dump() no devuelve valor y su unica utilidad es mostrar lo que estas recibiendo, entonces, asignar $input es lo que esta mal.

Otro par de modificaciones:
Código PHP:
Ver original
  1. // Servidor # 2
  2. var_dump($_POST);
  3. // Suponiendo que no "puedes ver" el resultado de eso,
  4. // Cancela la ejecucion:
  5.  
  6. // En servidor # 1
  7. $response = curl_exec($ch);
  8. echo $response;

Por cierto, lo de "token=test" como cadena, esta mal!, insisto, tendrias que enviar algo como:
curl_setopt($ch, CURLOPT_POSTFIELDS, array('token' => 'test'));
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 12/11/2011, 21:19
 
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
Bueno, var_dump() no devuelve valor y su unica utilidad es mostrar lo que estas recibiendo, entonces, asignar $input es lo que esta mal.

Otro par de modificaciones:
Código PHP:
Ver original
  1. // Servidor # 2
  2. var_dump($_POST);
  3. // Suponiendo que no "puedes ver" el resultado de eso,
  4. // Cancela la ejecucion:
  5.  
  6. // En servidor # 1
  7. $response = curl_exec($ch);
  8. echo $response;

Por cierto, lo de "token=test" como cadena, esta mal!, insisto, tendrias que enviar algo como:
curl_setopt($ch, CURLOPT_POSTFIELDS, array('token' => 'test'));

Gracias por tu ayuda pero sigo sin recibir servidor 2

Así es como está quedando

Archivo enviar.php => Servidor 1

Código PHP:
<?php
$datos 
= array();
$datos['token']= $_POST['token'];
$post_str '';

foreach (
$datos as $key => $value) {
    
$post_str .= $key'=' .urldecode($value).'&';
    
}

$post_str =substr($post_str0, -1);

$ch curl_init();
curl_setopt($chCURLOPT_URL'http://servidor2/servidor.php');
curl_setopt($chCURLOPT_POSTTRUE);
curl_setopt($chCURLOPT_POSTFIELDS, array('token' => 'test')); 
curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);


$response curl_exec($ch); 
echo 
$response;

curl_close($ch);

var_dump($post_str);
?>
Devuelve

Código PHP:
array(1) { ["token"]=> string(4"test" string(10"token=test" 

Archivo servidor.php = En Servidor 2

Código PHP:
<?php
require('config.php');

$input var_dump($_POST);
    
$link Conectarse();


mysql_query("INSERT INTO datos (dato) VALUES ('$input')"$link); 


mysql_close($link); 

 
?>
Al ver la base de datos está insertando pero sin datos.
  #9 (permalink)  
Antiguo 12/11/2011, 21:27
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Como Recibir Parametro con Curl?

Por supuesto que esta insertando sin datos... parece que no estas leyendo lo que te estoy sugiriendo y no acabas de entender que:

1- Las sugerencias que te he dado, no son para que funcione tu script, sino para AVERIGUAR PORQUE NO FUNCIONA
2- Los parametros que quieras enviar por CURLOPT_POSTFIELDS deben ser array asocitativo
3- var_dump() no devuelve un valor!!!! y, por tanto $input = var_dump($_POST); deja a $input CON UN VALOR VACIO!!!
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 12/11/2011, 21:34
 
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
Por supuesto que esta insertando sin datos... parece que no estas leyendo lo que te estoy sugiriendo y no acabas de entender que:

1- Las sugerencias que te he dado, no son para que funcione tu script, sino para AVERIGUAR PORQUE NO FUNCIONA
2- Los parametros que quieras enviar por CURLOPT_POSTFIELDS deben ser array asocitativo
3- var_dump() no devuelve un valor!!!! y, por tanto $input = var_dump($_POST); deja a $input CON UN VALOR VACIO!!!

Entendí, pero he buscando info todo el día como recibir el parametro en el otro servidor y no hay.


Gracias por tu tiempo.


Saludos
  #11 (permalink)  
Antiguo 13/11/2011, 00:56
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Como Recibir Parametro con Curl?

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!
__________________
- León, Guanajuato
- GV-Foto
  #12 (permalink)  
Antiguo 13/11/2011, 01:28
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 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
  #13 (permalink)  
Antiguo 13/11/2011, 13:06
 
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

Etiquetas: formulario, parametro, recibir
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 23:36.