- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
туда же куда и файл сам.
но каждый раз в функции дергать файл...
а если прокси 1к?
И ещё: как лучше попорядку или рандомно прокси брать? Наверное зависит от количества прокси в списке?
Если брать по порядку, то надо считать количество строк для возврата к началу и запоминать ключ массива в сессию, что в принципе немного увеличит размер функции.
Вот пример:
public function check($url)
{
$proxy = file('proxy.dat');
$count = count($proxy);
if(empty($_SESSION['proxy'])) //Если первый раз запустили скрипт, начинаем с первой строки
$_SESSION['proxy'] = 0;
if($_SESSION['proxy'] >= $count) //Если достигли конца списка, переходим в начало
$_SESSION['proxy'] = 0;
$ch = curl_init("тут url откуда парсим");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt($ch, CURLOPT_PROXY, $proxy[$_SESSION['proxy']]);
$result = curl_exec($ch);
if(curl_errno($ch) != 0)
die("curl_errno(".curl_errno($ch)."), curl_error(".curl_error($ch).")");
curl_close($ch);
$_SESSION['proxy']++;
return substr($result, 9);
}
TitanIKS, какой-то у вас извращенный способ...
Если КУРЛ за время работы скрипта отрабатывает тока 1 раз, то переписываем файл с проксяксями, опуская вниз то что было на 1 строке.
Если за время работы скрипта КУРЛ делает несколько запросов, то по такому же алгоритму опускаем использованные прокси в низ списка(файла с проксями)
Извините, пожалуйста, но где прописывать адрес этого .dat файла в коде?
Вопрос: куда ложить файл proxy.dat? Пожалуйста, подскажите!
тужа же где и сам скрипт.
Внедрил код парсера с рандомным выбором прокси, но парсер работает через раз - прокси проверенные 100% рабочие.
Код:
public function check($url)
{
$proxy = file('proxy.dat');
shuffle($proxy);
$ch = curl_init("тут url откуда парсим");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt($ch, CURLOPT_PROXY, $proxy[0]);
$result = curl_exec($ch);
if(curl_errno($ch) != 0)
die("curl_errno(".curl_errno($ch)."), curl_error(".curl_error($ch).")");
curl_close($ch);
return substr($result, 9);
}
Ошибка следующая, когда не работает:
curl_errno(52), curl_error(Empty reply from server)
Может подскажете что добавить в код CURL? Может useragent?
С уважением.
Попробуйте, в любом случае это желательно прописать
Добавил в код вот эти строки:
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 600);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.17) Gecko/2009122116 Firefox/3.0.17');
Теперь код выглядит так:
public function check($url)
{
$proxy = file('proxy.dat');
shuffle($proxy);
$ch = curl_init("тут url откуда парсим");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 600);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.17) Gecko/2009122116 Firefox/3.0.17');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt($ch, CURLOPT_PROXY, $proxy[0]);
$result = curl_exec($ch);
if(curl_errno($ch) != 0)
die("curl_errno(".curl_errno($ch)."), curl_error(".curl_error($ch).")");
curl_close($ch);
return substr($result, 9);
}
Но ОШИБКА curl_errno(52), curl_error(Empty reply from server) всёравно выскакивает через раз при парсинге.
Подскажите, пожалуста, в чём дело!!!
Пустой ответ от сервера.
Возможные причины:
1) Сервер Вас как-то идентифицирует и таким образом бреет.
2) На сервере(который парсите) установлен лимит на количество обрабатываемых запросов в единицу времени.
3) Челябинский метеорит дает о себе знать:)