Содержимое PHP file_get заблокировано веб-сервером - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь получить содержимое с другой веб-страницы, но удаленный сервер продолжает блокировать меня. Если я использую curl или отправляю 403, запрещено, если я использую file_get_contents

ini_set('error_reporting',E_ALL ^ E_DEPRECATED);
ini_set('display_errors', 'On');
ini_set('log_errors', 'Off');

function returnRandomUserAgent() {

  $aBrowser = array('Firefox', 'Safari', 'Opera', 'Flock', 'Internet Explorer', 'Seamonkey', 'Tor Browser', 'GNU IceCat', 'CriOS', 'TenFourFox',
    'SeaMonkey', 'B-l-i-t-z-B-O-T', 'Konqueror', 'Mobile', 'Konqueror', 'Netscape', 'Chrome', 'Dragon', 'SeaMonkey', 'Maxthon', 'IBrowse'
  );

  $aSystem = array('Windows 3.1', 'Windows 95', 'Windows 98', 'Windows 2000', 'Windows NT', 'Linux 2.4.22-10mdk', 'FreeBSD',
    'Windows XP', 'Windows Vista', 'Redhat Linux', 'Ubuntu', 'Fedora', 'AmigaOS', 'BackTrack Linux', 'iPad', 'BlackBerry', 'Unix',
    'CentOS Linux', 'Debian Linux', 'Macintosh', 'Android', 'iPhone', 'Windows NT 6.1', 'BeOS', 'OS 10.5', 'Nokia', 'Arch Linux',
    'Ark Linux', 'BitLinux', 'Conectiva (Mandriva)', 'CRUX Linux', 'Damn Small Linux', 'DeLi Linux', 'Ubuntu', 'BigLinux', 'Edubuntu'
  );

  $locals = array('cs-CZ', 'en-US', 'sk-SK', 'pt-BR', 'sq_AL', 'sq', 'ar_DZ', 'ar_BH', 'ar_EG', 'ar_IQ', 'ar_JO',
    'ar_KW', 'ar_LB', 'ar_LY', 'ar_MA', 'ar_OM', 'ar_QA', 'ar_SA', 'ar_SD', 'ar_SY', 'ar_TN', 'ar_AE', 'ar_YE', 'ar',
    'be_BY', 'be', 'bg_BG', 'bg', 'ca_ES', 'ca', 'zh_CN', 'zh_HK', 'zh_SG', 'zh_TW', 'zh', 'hr_HR', 'hr', 'cs_CZ', 'cs',
    'da_DK', 'da', 'nl_BE', 'nl_NL', 'nl', 'en_AU', 'en_CA', 'en_IN', 'en_IE', 'en_MT', 'en_NZ', 'en_PH', 'en_SG', 'en_ZA',
    'en_GB', 'en_US', 'en', 'et_EE', 'et', 'fi_FI', 'fi', 'fr_BE', 'fr_CA', 'fr_FR', 'fr_LU', 'fr_CH', 'fr', 'de_AT', 'de_DE'
  );

  return $aBrowser[rand(0, count($aBrowser) - 1)] . '/' . rand(1, 20) . '.' . rand(0, 20) . ' (' . $aSystem[rand(0, count($aSystem) - 1)] . ' ' . rand(1, 7) . '.' . rand(0, 9) . '; ' . $locals[rand(0, count($locals) - 1)] . ';)';
}

$browser = returnRandomUserAgent();

ini_set('user_agent',$browser);

$contents = file_get_contents("https://webpage_url_here");

echo $contents

Но я получаю

 Warning: file_get_contents("https://webpage_url_here"): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /home/USER/public_html/crawler.php on line 31

Я пробовал скручивать вот так

function curl($url){

$headers[]  = "User-Agent:".returnRandomUserAgent();
$headers[]  = "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
$headers[]  = "Accept-Language:en-us,en;q=0.5";
$headers[]  = "Accept-Encoding:gzip,deflate";
$headers[]  = "Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$headers[]  = "Keep-Alive:115";
$headers[]  = "Connection:keep-alive";
$headers[]  = "Cache-Control:max-age=0";

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_ENCODING, "gzip");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
$data = curl_exec($curl);
curl_close($curl);
return $data;

}

$data = curl('https://webpage_url_here');

Но я получаю "Вы были заблокированы"

Есть ли работа вокруг, чтобы бытьудалось получить содержимое этой страницы для анализа и извлечения ссылок?

Спасибо и всего наилучшего.

1 Ответ

0 голосов
/ 15 сентября 2018

Если вы открываете URI со специальными символами, например пробелами, вам необходимо закодировать URI с

urlencode()

перед

file_get_contents()

. Для справки Нажмите здесь !

...