php - curl_init - curlopt_header
¿Por qué cURL devuelve una cadena vacía? (4)
Tengo un problema con la cURL de PHP que devuelve una cadena vacía con algunas URL. Estoy tratando de analizar los metadatos OG de diferentes páginas web y funciona con todos los sitios web que he probado, excepto NYTimes. Aquí está mi código hasta ahora.
print_r(get_og_metadata(''http://somewebsite.com''));
public function get_data($url)
{
$ch = curl_init();
$timeout = 5;
// the url to fetch
curl_setopt($ch, CURLOPT_URL, $url);
// return result as a string rather than direct output
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// set max time of cURL execution
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
public function get_og_metadata($url)
{
libxml_use_internal_errors(TRUE);
$data = $this->_get_data($url);
$doc = new DOMDocument();
$doc->loadHTML($data);
$xpath = new DOMXPath($doc);
$query = ''//*/meta[starts-with(@property, /'og:/')]'';
$metadatas = $xpath->query($query);
$result = array();
foreach($metadatas as $metadata)
{
$property = $metadata->getAttribute(''property'');
$content = $metadata->getAttribute(''content'');
$result[$property] = $content;
}
return $result;
}
Estas 5 líneas hicieron la magia por mí.
curl_setopt($ch, CURLOPT_USERAGENT,''Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17'');
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
(Esa otra respuesta soy yo también)
Esto es lo que lo hizo por mí. Estaba buscando la verificación SSL, que no necesitaba en este caso específico.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
Esto es lo que lo hizo por mí. Estaba buscando la verificación SSL, que no necesitaba en este caso específico.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
Mi conjetura es que un sitio como el de Nueva York tiene protección contra tal comportamiento. Lo más probable es que esté basado en el agente de usuario, que puede falsificar así:
curl_setopt($ch,CURLOPT_USERAGENT,''Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17'');
Este es el agente más común por cierto.