Tengo un código simple que hace una solicitud principal de una URL y luego imprime los encabezados de respuesta. Me di cuenta de que en algunos sitios esto puede llevar mucho tiempo en completarse. Por ejemplo, solicitar http://www.arstechnica.com
lleva unos dos minutos. He intentado la misma solicitud usando otro sitio web que hace la misma tarea básica, y vuelve de inmediato. Entonces debe haber algo que haya configurado incorrectamente que está causando este retraso.PHP/Curl: solicitud HEAD tarda mucho tiempo en algunos sitios
Aquí está el código que tengo:
$ch = curl_init();
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 20);
curl_setopt ($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
// Only calling the head
curl_setopt($ch, CURLOPT_HEADER, true); // header will be at output
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD'); // HTTP request is 'HEAD'
$content = curl_exec ($ch);
curl_close ($ch);
Aquí hay un enlace a la página web que hace la misma función: http://www.seoconsultants.com/tools/headers.asp
El código anterior, al menos en mi servidor, toma dos minutos para recuperar www.arstechnica.com, pero el servicio en el enlace de arriba lo devuelve de inmediato.
¿Qué me estoy perdiendo?
lo _curl_ falta es un cuerpo de la respuesta, que no sabe que las peticiones HEAD sólo devuelven cabeceras (sin cuerpo) por lo que está en espera en el servidor para enviar más datos. así que el curl espera 2 minutos y luego se da por vencido. – Jasen