Cómo cambiar de POST a GET en PHP CURL
Pregunta
He intentado cambiar de una solicitud Post anterior a una solicitud Get. Lo que supone que es un Get pero finalmente hace una publicación.
Intenté lo siguiente en PHP:
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, null);
curl_setopt($curl_handle, CURLOPT_POST, FALSE);
curl_setopt($curl_handle, CURLOPT_HTTPGET, TRUE);
¿Qué me estoy perdiendo?
Información adicional: Ya tengo una conexión configurada para hacer una solicitud POST. Eso se completa con éxito, pero más tarde cuando trato de reutilizar la conexión y volver a GET usando los setopts anteriores, todavía termina haciendo una POST internamente con encabezados POST incompletos. El problema es que cree que está haciendo un GET pero termina colocando un encabezado POST sin el parámetro de longitud de contenido y la conexión falla con un ERROR 411.
Solución 3
Resuelto: el problema yace aquí:
Configuré POST
a través de _CUSTOMREQUEST
y _POST
y el _CUSTOMREQUEST
persistió como POST
mientras _POST
cambió a _HTTPGET
. El servidor asumió que el encabezado de _CUSTOMREQUEST
era el correcto y regresó con un 411.
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');
Otros consejos
Asegúrese de colocar su cadena de consulta al final de su URL al hacer una solicitud GET.
$qry_str = "?x=10&y=20"; $ch = curl_init(); // Set query data here with the URL curl_setopt($ch, CURLOPT_URL, 'http://example.com/test.php' . $qry_str); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 3); $content = trim(curl_exec($ch)); curl_close($ch); print $content;
With a POST you pass the data via the CURLOPT_POSTFIELDS option instead of passing it in the CURLOPT__URL. ------------------------------------------------------------------------- $qry_str = "x=10&y=20"; curl_setopt($ch, CURLOPT_URL, 'http://example.com/test.php'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 3); // Set request method to POST curl_setopt($ch, CURLOPT_POST, 1); // Set query data here with CURLOPT_POSTFIELDS curl_setopt($ch, CURLOPT_POSTFIELDS, $qry_str); $content = trim(curl_exec($ch)); curl_close($ch); print $content;
Nota de curl_setopt ()
docs para CURLOPT_HTTPGET
(énfasis agregado):
[Establezca CURLOPT_HTTPGET igual a]
TRUE
en reset el método de solicitud HTTP para GET.
Dado que GET es el valor predeterminado, esto solo es necesario si se ha cambiado el método de solicitud.
Agregue esto antes de llamar a curl_exec ($ curl_handle)
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');
La solicitud CURL por defecto es GET, no tiene que configurar ninguna opción para realizar una solicitud GET CURL.