Intereting Posts
Как добавить функцию друга / друга в PHP? Используя PHP для отправки электронной почты, измените FROM, чтобы не было моего имени сервера Преобразование с упрощенного на традиционный китайский Сохранение пользовательского поля продукта и его отображение на странице корзины PHP-перенаправление с переменными строки запроса HTTP Оператор switch возвращает неверные результаты Ошибки PHP из-за ошибки синхронизации «TooManyMessages» Ошибка при использовании c2dm.intent.RECEIVE Intent В Chrome появилось сообщение об ошибке «Не удалось загрузить документ PDF» на встроенных PDF-файлах хороший ресурс или книга для архивирования объектно-ориентированного программного обеспечения html jquery переключает между двумя формами mysql dump с использованием php-скрипта Заполнение событий в полном календарном javascript из базы данных Плагин загрузки файлов JQuery: динамически изменить путь загрузки? Объединить 2 массива разной длины

Почему cURL возвращает пустую строку?

У меня проблема с PHP cURL, возвращающим пустую строку с некоторыми URL-адресами. Я пытаюсь проанализировать метаданные OG различных веб-страниц, и он работает со всеми веб-сайтами, которые я пробовал, за исключением NYTimes. Вот мой код до сих пор.

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; } 

Я предполагаю, что такой сайт, как Нью-Йорк, имеет защиту от такого поведения. Скорее всего, это основано на пользовательском агенте, который вы можете подделать так:

 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'); 

Это самый распространенный агент.

Эти 5 строк сделали магию для меня.

  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); 

(Этот другой ответ тоже мне)

Это то, что сделал это для меня. Он искал SSL verificaiton, который мне не нужен в этом конкретном случае.

 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 

Это то, что сделал это для меня. Он искал SSL verificaiton, который мне не нужен в этом конкретном случае.

 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);