Я получаю следующую ошибку:
Предупреждение: file_get_contents ( https://www.readability.com/api/content/v1/parser?url=http://www.redmondpie.com/ps1-and-ps2-games-will-be-playable-on- playstation-4-very-soon /? utm_source = dlvr.it & utm_medium = twitter & token = MYAPIKEY ) [function.file-get-contents]: не удалось открыть поток: HTTP-запрос не удался! HTTP / 1.1 404 НЕ НАЙДЕН в /home/DIR/htdocs/readability.php в строке 23
- URL-адрес Rewriting OpenCart Продукты SEO
- как извлечь данные из url как facebook в asp.net mvc3?
- CURL возвращает код ответа 200 и 0 для одной и той же страницы в разное время
- При использовании уникальной буквенно-цифровой строки для короткого URL-адреса лучше ли хранить созданную строку в базе данных или кодировать / декодировать «на лету»?
- как получить ссылку из тега img
С некоторыми эхо-сигналами я получил URL-адрес, обработанный функцией, и это нормально и действительно, я делаю запрос из своего браузера, и все в порядке.
Дело в том, что я получаю ошибку выше с файлом_get_contents, и я действительно не понимаю, почему.
URL-адрес действителен, и функция НЕ блокируется службой бесплатного хостинга (поэтому мне не нужен завиток).
Если кто-то может заметить ошибку в моем кодексе, я был бы признателен! Благодаря…
Вот мой код:
<?php class jsonRes{ public $url; public $author; public $url; public $image; public $excerpt; } function getReadable($url){ $api_key='MYAPIKEY'; if(isset($url) && !empty($url)){ // I tried changing to http, no 'www' etc... -THE URL IS VALID/The browser opens it normally- $requesturl='https://www.readability.com/api/content/v1/parser?url=' . urlencode($url) . '&token=' . $api_key; $response = file_get_contents($requesturl); // * here the code FAILS! * $g = json_decode($response); $article_link=$g->url; $article_author=''; if($g->author != null){ $article_author=$g->author; } $article_url=$g->url; $article_image=''; if($g->lead_image_url != null){ $article_image=$g->lead_image_url; } $article_excerpt=$g->excerpt; $toJSON=new jsonRes(); $toJSON->url=$article_link; $toJSON->author=$article_author; $toJSON->url=$article_url; $toJSON->image=$article_image; $toJSON->excerpt->$article_excerpt; $retJSONf=json_encode($toJSON); return $retJSONf; } } ?>
Иногда веб-сайт блокирует сканеры (от удаленных серверов) от доступа к их страницам.
То, что они делают, чтобы обойти это, обманывает заголовки браузеров. Например, притворяться, что это Mozilla Firefox, а не подлый веб-скребок PHP.
Это функция, которая использует библиотеку cURL для этого.
function get_data($url) { $userAgent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'; $ch = curl_init(); curl_setopt($ch, CURLOPT_USERAGENT, $userAgent); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); $html = curl_exec($ch); if (!$html) { echo "<br />cURL error number:" .curl_errno($ch); echo "<br />cURL error:" . curl_error($ch); exit; } else{ return $html; } //End of cURL function }
Затем можно было бы назвать это следующим:
$response = get_data($requesturl);
Curl предлагает гораздо больше возможностей для выбора удаленного контента и проверки ошибок, чем file_get_contents. Если вы даже хотите настроить его дальше, ознакомьтесь со списком опций cURL здесь – Сокращенный список параметров cURL