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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top