php - ejemplos - Curl:*Viola RFC 2616/10.3.2 y cambia de POST a GET
php curl timeout (3)
Estoy usando curl para publicar en un script.
curl_setopt ($ch, CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postvars);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
Pero hay 301 redirecciones involucradas que casues curl para cambiar de POST a GET.
HTTP/1.1 301 Moved Permanently < Location: https://myserver.org/php/callback-f.php < Content-Length: 0 < Date: Wed, 16 Nov 2011 17:21:06 GMT < Server: lighttpd/1.4.28 * Connection #0 to host myserver.org left intact * Issue another request to this URL: ''https://myserver.org/php/callback-f.php'' * Violate RFC 2616/10.3.2 and switch from POST to GET * About to connect() to myserver.org port 443
¿Alguien sabe cómo puedo evitar que Curl cambie a GET, por favor?
Bueno, ante la recompilación de php porque mi curl no soportaba POSTREDIR me conformé con resolver esto con JQuery. ¡Espero que esto ayude a alguien!
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>
$.post("path/path/callback.php", { "key":"value", "key2":"value2"});
</script>
</head>
hello
</html>
Del último borrador de HTTP :
Nota: Por razones históricas, los agentes de usuario PUEDEN cambiar el método de solicitud de POST a GET para la solicitud posterior. Si no se desea este comportamiento, se puede usar el código de estado 307 (redireccionamiento temporal) en su lugar.
Creo que un 303 See Other podría ser adecuado también.
CURLOPT_POSTREDIR
se puede configurar para configurar este comportamiento (método de solicitud para encabezados de ubicación 301 redireccionamientos automáticos en curl):
curl_setopt (, CURLOPT_POSTREDIR, 3);
aquí 3 le dice al módulo curl que redirija tanto 301 como 302 solicitudes.
0,1,2,3 son las opciones válidas para el último argumento.
0 -> no establecer ningún comportamiento
1 -> seguir redirigir con el mismo tipo de solicitud solo para 301 redireccionamientos.
2 -> seguir redirigir con el mismo tipo de solicitud solo para 302 redireccionamientos.
3 -> seguir redirigir con el mismo tipo de solicitud tanto para 301 como para 302 redireccionamientos.
Ver también: Solicitud # 49571 CURLOPT_POSTREDIR no implementado que tiene algunos comentarios útiles, como establecer un método de solicitud personalizado:
curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, "POST");