Cristóbal
Soy un novato, estoy tratando de obtener una secuencia de comandos para activar otra secuencia de comandos con Curl en PHP, pero parece que no está enviando los parámetros.
¿Hay una función separada para agregar parámetros?
<?php
$time = time();
$message = "hello world";
$urlmessage = urlencode( $message );
$ch = curl_init("http://mysite.php?message=$urlmessage&time=$time");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
?>
¿Alguien podría indicarme la dirección correcta?
La respuesta aceptada es buena para POST, pero ¿y si OP quisiera específicamente GET? Algunas API REST especifican el método http y, a menudo, no es bueno hacer POST cuando debería ser GET.
Aquí hay un fragmento de código que GET con algunos parámetros:
$endpoint="http://example.com/endpoint";
$params = array('foo' => 'bar');
$url = $endpoint . '?' . http_build_query($params);
curl_setopt($ch, CURLOPT_URL, $url);
Esto hará que su solicitud se haga con GET
a http://example.com/endpoint?foo=bar
. Este es el método http predeterminado, a menos que lo establezca en algo más como POST
con curl_setopt($ch, CURLOPT_POST, true)
– así que no hagas eso si necesitas OBTENER específicamente.
Si necesita usar uno de los otros métodos http (DELETE o PUT, por ejemplo), use curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method)
. Esto también funciona para GET y POST.
-
sí, php.net/manual/en/function.http-build-query.php es una cosa
– oraciónagupa
21 de enero de 2020 a las 23:05
-
Súper práctico y funciona a las mil maravillas. ¡Gracias!
– lStoilov
29 de junio a las 13:12
Necesitas curl_setopt() junto con el parámetro CURLOPT_POSTFIELDS. Eso enviará los parámetros dados a la página de destino.
curl_setopt($ch, CURLOPT_POSTFIELDS, 'foo=1&bar=2&baz=3');
PD: también revisa http_build_query() lo cual es útil cuando se envían muchas variables.
-
muchas gracias, el único problema con eso es que no permitirá que mis variables se publiquen como valores o cadenas, sino que las publicará como literales, es decir, $time should = 5327287 pero $time = “$time” en su lugar. aunque gracias
– Cristóbal
16 de junio de 2011 a las 6:14
-
@Christopher: cambie las comillas simples a comillas dobles, eso solucionará el problema de los literales. Además, coloque la cadena de valores POST en una variable, en lugar de crearla dentro de la llamada a la función curl_setopt. Esto se debe a que, por lo general, es una buena idea enviar la longitud de la POST con el curl también, y luego no es necesario generar la consulta dos veces.
– Batalla_707
16 de junio de 2011 a las 6:27
-
¿Hay alguna forma de que se ejecute el script pero luego vuelva al original?
– Cristóbal
16 de junio de 2011 a las 7:01
-
@chrisR, ¿cómo usar esos valores en el archivo php activado en el lado del servidor?
– Zame
29 de agosto de 2016 a las 21:24
-
@WalidSarkis usando CURLOPT_POSTFIELDS simplemente crea una solicitud POST http con parámetros POST para que pueda acceder a ellos en el extremo receptor desde $_POST global en php
– ChrisR
30 de agosto de 2016 a las 8:51
necesitas establecer CURLOPT_POST
como true
y CURLOPT_POSTFIELDS
=> parámetros
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
una sugerencia, establecer ‘CURLOPT_RETURNTRANSFER
‘, como verdadero para devolver la transferencia como una cadena del valor devuelto de curl_exec($ch)
en lugar de enviarlo directamente
-
Esta es una solución mucho mejor a la aceptada. Es mejor establecer
CURLOPT_POSTFIELDS
a una matriz de parámetros que construir una versión de cadena de consulta.– meconroy
24 de febrero de 2016 a las 16:09
Aquí hay una solución simple para esto.
$mobile_number = $_POST['mobile_number'];
$sessionid = $_POST['session_id'];
CURLOPT_URL => 'https://xxyz.jkl.com/v2.0/search?varible_that_you_want_to_pass=".$mobile_number."&requestId=1616581154955&locale=en-US&sessionId='.$sessionid,
Lea la documentación de PHP: us3.php.net/manual/en/book.curl.php. Este problema se explica con bastante detalle.
– Batalla_707
16 de junio de 2011 a las 6:23
No hagas esto;
$ch = curl_init("http://mysite.php?message=$urlmessage&time=$time");
Hacer esto;$ch = curl_init('http://mysite.php?message=' . $urlmessage . '&time=' . $time);
Es mucho más fácil de leer y estará un byte/8 más seguro. ¿Qué pasaría si tuvieras una variable?$url
teóricamente podría usarse en lugar de$urlmessage
.– Philiplip
16 de junio de 2011 a las 6:23
@Philiplip: Aún mejor, use sprintf(). Así: sprintf(‘mysite.com/myscript.php?message=%s&time=%d‘, $urlmensaje, $hora); (EDITAR:…. parece que no puedo descifrar cómo agregar piezas de código en los comentarios….: S)
– Batalla_707
16 de junio de 2011 a las 6:29