Ayer estuve mosqueado con un problema que me daba curl a la hora en enviar peticiones post con php.
Mi aplicación se conectaba a una api que me devolvía un resultado en json, pero en lugar de eso me devolvía una cadena vacía a menos que fallase la autenticación. Lo que me mosqueaba es que sólo fallaba con peticiones POST y no con peticiones GET.
Examinando las cabeceras HTTP de respuesta se mostraba un error indicado como “HTTP/1.1 417 Expectation Failed Connection: close Content-Length: 0“
La solución al problema es enviar el campo Expect (vale con mandarlo vacío) dentro de las cabeceras http de la petición, por ejemplo:
$ch = curl_init(); //metemos el campo expect en la cabeceras curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers = array( "Expect:") );
A mí también me ocurría este problema. Tu solución me funciona perfectamente.
Hola Asier y Javi,
Llevo 3 dias peleandome 24 horas con este tema y no consigo sacar nada. Mi caso es el mismo que el tuyo, Asier. Tengo un aplicacion actionscript que se conecta a mi API php, que utiliza CURL para conexiones http. Pues bien, la hij** d* p**$!! se conecta de cada 10 veces, 1 o ninguna, y el resto son cadenas vacias. ME he vuelto loco y no me funciona nada de lo que leo por los foros, tambien lo vuestro lo probe y nada… Este es mi codigo, podeis ayudarme por favor?
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => “”,
CURLOPT_USERAGENT => “spider”,
CURLOPT_AUTOREFERER => true,
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT => 120,
CURLOPT_MAXREDIRS => 10,
CURLOPT_HTTPHEADER => array(“Expect:”),
);
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = trim($content);
$this->vsResult = $header;
Hola Jose Juan,
Ponle el CURLOPT_HEADER a true es decir…
curl_setopt ($ch , CURLOPT_HEADER, true);
a ver que cabecera te retorna la respuesta al hacer el curl_exec, tiene que retornarte algun error ahí.
¿Qué servidor web usas? Lighttpd, nginx, apache, iis?
Hola Asier,
Lo primero, muchas gracias por contestar y tan pronto. Espero que comprendas el dolor de cabeza de este tema, ya que te paso algo parecido a ti tambien.
Lo segundo. Es muy dificil que obtenga respuesta, incluso con el HEADER a true. Pero bueno, alguna vez que otra sale algo asi:
HTTP/1.1 200 OK
X-Powered-By: Servlet/2.5
Server: Sun Java System Application Server 9.1_01
Content-Type: application/xml
Content-Length: 130
Date: Mon, 27 Apr 2009 11:04:17 GMT
… y fin de la historia…
Alguna que otra vez me indica que el contenido este “chuncked” no se si eso influye…
Un saludo y gracias
LAnzando la URL en el navegador funciona correctamente. Desde mi ordenador este codigo tambien funciona correctamente, lo que me llevaba a pensar que es cosa de algun firewall, pero no, porque a otras urls de este mismo site se conecta sin problemas.
Y lo mas divertido: si le paso algun parametro INCORRECTO, me da error de servidor diciendome que el parametro tiene un valor incorrecto y etc, todo como debe ser, pero si le paso valores todos correctos, entonces la respuesta solo me llega de vez en cuando…
Osea, para fallar, falla bien, pero para funcionar, solo me funciona una vez de 10. Dios que he hecho yo para merecer esto :’(
MM no sera que al api que haces la peticion te pide parametros como el ID o el nombre por eso te lo regresa vacios en el post, pues por que esos valores bienen “vacios”