public function downloadPage($url, $use_proxy = FALSE) {
file_put_contents($this->cookie_file, '');
$ch = curl_init();
if ($use_proxy === TRUE)
curl_setopt($ch, CURLOPT_PROXY, $this->getRandomItemFromArray($this->proxies));
//curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, 'https://www.google.ru/search?q=' . urlencode($url));
curl_setopt($ch, CURLOPT_USERAGENT, $this->getRandomItemFromArray($this->userAgent));
curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_file);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_URL, $url);
for ($i = 0; $i < $this->repeatOnError; ++$i) {
if ($content = curl_exec($ch)) {
if (stripos($content, '</html>')) {
return $content;
}
}
}
return FALSE;
}
Ошибок найти не могу, но если передавать юзерагент таким способом, как описано в методе или сначала записать результат
$ua = $this->getRandomItemFromArray($this->userAgent)в переменную, а потом ее подставить в ua, как описано в методе, то сервер, к которому обращаюсь, возвращает, 400 ошибку.
Если же скопировать с файла с юзерагентами строку, и вставить в вручную
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9');
то все работает.
У кого какие мысли?)
P.S. Метод getRandomItemFromArray работает ) там пару строк кода.
Спустя 2 минуты, 27 секунд (3.05.2012 - 20:23) Nikitian написал(а):
Всё-таки хочется вдть это магический метод и свойство $userAgent
Спустя 5 минут, 55 секунд (3.05.2012 - 20:29) alexbel2404 написал(а):
public function getRandomItemFromArray(Array $array) {
$index = array_rand($array);
return $array[$index];
}
$this->userAgent = file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'useragents.txt');
Проверял не раз их работоспособность)
Спустя 16 минут, 36 секунд (3.05.2012 - 20:46) Nikitian написал(а):
К функии file() добавьте второй параметр
Цитата |
FILE_IGNORE_NEW_LINES Не добавлять новую строку к концу каждого элемента массива |
ибо
Цитата |
Замечание: Каждая строка в полученном массиве будет завершаться символами конца строки (если вы не указали флаг FILE_IGNORE_NEW_LINES), поэтому, если вам будет нужно избавиться от этих символов, вы можете использовать функцию rtrim(). |
Спустя 3 минуты, 12 секунд (3.05.2012 - 20:49) alexbel2404 написал(а):
спасибо, видимо не доспал сегодня) все работает)