headers curlopt_header curl_init php curl domdocument

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.