Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Перебор проксей из массива
Покинул форум
Сообщений всего: 55
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
Просьба помочь с проблемой подвисания скрипта, а именно как я понял не осуществляется переключение на новый прокси если не приходит ответ или приходит ответ с ошибкой.
На деле все выглядит так что скрипт выдает результаты, пока прокси не банится, после этого прокси не переключается на новый из массива проксей, и работа скрипта не продолжается. Если же остановить скрипт и почистить в листе проксей пару-тройку проксей, и перезапустить скрипт, то работа продолжается до следующего подвисания.
Цель скрипта чтобы он обработал все строки из файла url.txt, а прокси перебирались по порядку, по кругу пока весь файл url.txt не будет обработан. Спасибо.
И вопрос по логике скрипта... сейчас на сколько я понял: есть 10 прокси и 100 строк поиска.
Скрипт берёт 1 прокси и прогоняет все 100 строк. Потом берёт второй прокси и прогонят ещё 100 строк. Надо на выходе получить пройденных 1000 строк или надо просто обойти 100 строк, но с подменой ip при его бане?
Покинул форум
Сообщений всего: 55
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
Elio пишет:
ммм... а что пишет
curl_getinfo($ch) ?
извиняюсь за криворукость, но не понял куда вставить код, чтобы что-то толковое вышло.
Elio пишет:
И вопрос по логике скрипта... сейчас на сколько я понял: есть 10 прокси и 100 строк поиска.
если точнее примерно 500 строк прокси и 1000 строк url
Elio пишет:
Скрипт берёт 1 прокси и прогоняет все 100 строк. Потом берёт второй прокси и прогонят ещё 100 строк. Надо на выходе получить пройденных 1000 строк или надо просто обойти 100 строк, но с подменой ip при его бане?
На выходе надо пройти все строки из url.txt и без разницы сколько на это прокси потребуется, вполне может быть и так что по 1 прокси на запрос, а потом просто по кругу прокси идут из массива, если их меньше чем url. главное чтобы при неполучении нужного ответа от прокси или просто при неполучении какого либо ответа, ip менялся на следующий, а url оставался прежний пока ответ не будет получен. по окончании и прохождения всех элементов из массива формируемого из url.txt скрипт завершает работу. постарался объяснить как можно подробнее.
Покинул форум
Сообщений всего: 15
Дата рег-ции: Февр. 2011 Откуда: Hell
Помог: 0 раз(а)
Предыдущий код надо вставить после 13ой строки.
Быстры фикс данной программы:
Добавить условия перехода к следующему итератору прокси, при получении страницы с ошибкой.
Действия:
1) Выяснить какой текст выводит страница с ошибкой. После 14той строки вставить
записываем последнюю скачанную страницу в файл put.html, что-бы потом посмотреть как выглядит страницу на которой виснет скрипт.
2) заменить ненужный цикл прокси с 28й строки по 35 на:
если мы не нашли на странице того что искали. Проверяем получена ли вообще страница. если нет то удаляем одну строку прокси и следующий запрос уже отправляем с другим прокси. (когда узнаешь, что ты получаешь на плохой странице, то в условие elseif нужно будет добавить поиск уникального текста который есть только на "плохой" странице и при ее нахождении менять прокси.)
3) Добавить после 12ой строки:
где вместо WAITING_TIME указать время в секундах, которое скрипту нужно ожидать до получения ответа от сервера. (защита от долгой загрузки страницы.) время варьируется от качества прокси у меня стоит 25.
4) while(strlen($content)<1) добавлен для того, чтобы не получить ответ на каждую строку запроса. (опять же надо смотреть какой возвращается ошибочная страница и заменит здесь условие) в моём примере предполагается, что страница возвращается пустой.
xsh
Отправлено: 16 Августа, 2011 - 10:11:55
Новичок
Покинул форум
Сообщений всего: 55
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
Elio спасибо большое, сейчас попробую. (Добавление)
? (Добавление)
и что делать если обнаружится не одна а несколько ошибок? сейчас пытаюсь другие выявить. (Добавление)
а 302 ошибку отдает гугл когда банит прокси, он переадресует на страницу вида http://www[dot]google[dot]com/sorry/?con[dot][dot][dot]arch?q=cache:URL ну и "Мы зарегистрировали подозрительный трафик, исходящий из вашей сети. Повторите запрос позднее."
прокси при этом не переключается на новый, и скрипт виснет. сейчас тоже не переключается. наверное потому что elseif не прописал
Покинул форум
Сообщений всего: 15
Дата рег-ции: Февр. 2011 Откуда: Hell
Помог: 0 раз(а)
$content=='<TITLE>302 Moved</TITLE>' - не подействует... тк html страница отличается от это записи. но смысл правильный.
elseif($content=='' OR strpos($content, '302 Moved') !== false) http://www.php.su/array_shift " target="_blank">array_shift ($prox);
и также ещё кучу условий можно впихнуть через "OR" или "||".
ещё не плохо бы было поставить условие, что у нас могут закончится прокси.
if(count($prox)==0) $prox=get_proxy(); ссылку на функцию присвоения прокси.
изначально в коде не было fclose($handle).
while я думаю в данном скрипте можно не трогать. но можно подменить его проверку. те когда мы получаем ошибку 303. то $content будет по strlen больше 1, а нам надо чтобы скрипт прошёл строку ещё раз, но с другим прокси. поэтому пишем:
не понял куда лучше вставить if(count($prox)==0) $prox=get_proxy(); (Добавление)
сейчас еще нотисы пишет PHP Notice: Undefined variable: prox in /var/www/1.php on line 38
по этой строке $content = get("http://webcache.googleusercontent.com/search?q=cache:$n", $prox[0]); (Добавление)
это if(count($prox)==0) $prox=get_proxy(); условие как я понимаю заново забирает список проксей из файла и формирует массив, т.е. если например исходный файл с проксями в реальном времени будет обновляться, то при окончании проксей он возьмет новую партию? (Добавление)
вот такая ошибка еще вышла в процессе работы скрипта: PHP Warning: array_shift() expects parameter 1 to be array, null given in /var/www/1.php on line 44
это строка array_shift ($prox);
я так понимаю прокси закончились рабочие как раз? потому что я условие еще не ставил.
Покинул форум
Сообщений всего: 15
Дата рег-ции: Февр. 2011 Откуда: Hell
Помог: 0 раз(а)
смотри... мы убрали из скрипта прямое объявление $prox и запихнули его в функцию, тк планируем использовать его несколько раз.
Следовательно до foreach( $file as $n ) (35 стр.)
надо поставить $prox=get_proxy. для первого занесения массива в переменную.
проверку надо ставить с самого начала. while, те. сразу после объявления переменной $content
ошибки должны будут исчезнуть.
Цитата:
сейчас еще нотисы пишет PHP Notice: Undefined variable: prox in /var/www/1.php on line 38
по этой строке $content = get("http://webcache.googleusercontent.com/search?q=cache:$n", $prox[0]);
тк небыло изначально объявлен $prox.
Цитата:
если например исходный файл с проксями в реальном времени будет обновляться, то при окончании проксей он возьмет новую партию?
именно.
Цитата:
PHP Warning: array_shift() expects parameter 1 to be array, null given in /var/www/1.php on line 44
это строка array_shift ($prox);
я так понимаю прокси закончились рабочие как раз? потому что я условие еще не ставил.
скорее они не начинались тк. $prox был равен нулю. он не объявлялся.
elseif($content=='' OR strpos($content,'302 Moved')!==false OR strpos($content,'info@linkweava.net')!==false)
если это фирма предоставляющая прокси. или другую фразу которая будет одинакова на таких "страницах ошибки".
спасибо за совет, я добавил еще пару условий туда, теперь вроде все работает довольно стабильно.
есть вопрос: я правильно вставил строки $prox=get_proxy(); и if(count($prox)==0) $prox=get_proxy(); ?
очень благодарю за помощь.
в течении этих 5 секунд курл будет ждать ответа и дальше не пойдёт, можно ставить 1 или 2, хорошие прокси за это время отвечают. (Добавление)
а ну кстате ещё multicurl тоже нужен для таких ситуаций
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
xsh
Отправлено: 17 Августа, 2011 - 09:07:29
Новичок
Покинул форум
Сообщений всего: 55
Дата рег-ции: Авг. 2011
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.