Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / cURL в цикле / 7 сообщений из 7, страница 1 из 1
04.02.2015, 19:33
    #38871727
darlov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL в цикле
Подскажите пожалуйста, запускаю в цикле cURL на 20-25 цикле из 40 останавливается, пробовал повышать таймаут cURL, не решило проблему. Так же ставил задержку цикла, то же самое. Целый день убил не понимаю.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
        $url = "http:/site...";
        $user_agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";
        $header [] = "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1";
        $header [] = "Accept-Language: ru-RU,ru;q=0.9,en;q=0.8";
        $header [] = "Accept-Charset:  utf-8, *;q=0.1";
        $header [] = "Accept-Encoding: deflate, identity, *;q=0";
        $user_cookie = "cookies.txt";

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_FAILONERROR, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 3);
        curl_setopt($ch, CURLOPT_REFERER, $referer);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header );
        curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie);
        curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie);
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
        curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
        $result = curl_exec($ch);
        curl_close($ch);
    for($page=0;$page<40;$page++ ){
        $url = "http://site?page=".$page;
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_FAILONERROR, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 3);
        curl_setopt($ch, CURLOPT_REFERER, $referer);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header );
        curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie);
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
        curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);

        $html = curl_exec($ch);
        curl_close($ch);
}
...
Рейтинг: 0 / 0
04.02.2015, 21:21
    #38871761
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL в цикле
Вероятно, временный бан по айпи на удалённом сервере (а бывает и постоянный), или удалённый сервер "прилегает" от создаваемой нагрузки или... еще сотня причин. Попробуйте запросить что-то другое (да хотя бы robots.txt) и/или с другого ресурса, чтобы определить точнее место проблемы. А вообще, довольно распространённый способ борьбы с ботами - нормальный пользователь на просмотр 20 страничек потратит гораздо больше времени, нежели не слишком порядочный робот :-)
...
Рейтинг: 0 / 0
04.02.2015, 22:00
    #38871783
darlov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL в цикле
vkle,
Решил проблему. Возможно кому то пригодится т.к. на просторах рунета нашел много таких не решенных вопросов.
Все оказалось проще, все переменные в конце каждого цикла уничтожаю. unset() Или можно проще поместить все в функцию и вызывать ее каждый цикл, соответственно переменные будут автоматически уничтожатся. Видимо при парсинге в цикле идет переполнение.
...
Рейтинг: 0 / 0
05.02.2015, 11:09
    #38871996
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL в цикле
ну ты не решил проблему ,а угадал

$user_agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";
$header [] = "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1";
$header [] = "Accept-Language: ru-RU,ru;q=0.9,en;q=0.8";
$header [] = "Accept-Charset: utf-8, *;q=0.1";
$header [] = "Accept-Encoding: deflate, identity, *;q=0";
естественно что этот код в цикле приведёт к тому, что в заголовках будет(на 25 шаге???) по 25 копий одних и тех же хедоров.

ооо
подозреваю что гдето и 4кб может быть(на веб серверах разные там буферы лимиты ставяться N*4Kb

твои 245*25копий - итого 6125

но у тебя ещо как минимум хедер GET .....

вот похоже что на дефолтный лимит апача - 8кб ты и нарываешься.
...
Рейтинг: 0 / 0
05.02.2015, 11:12
    #38871998
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL в цикле
всмысле не 25 GET..
а GET + REFER + COOCIE +user-agent + ещо чтото дефолтно шлёться, и акурат на 8кб буфер для хедеров попадаешь
...
Рейтинг: 0 / 0
05.02.2015, 11:14
    #38872000
-k2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL в цикле
alex564657498765453,

у него вроде header[]= не в цикле как раз :)
...
Рейтинг: 0 / 0
05.02.2015, 21:58
    #38872872
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL в цикле
-k2-,

да точно, я не заметил вообще у него цикла, и подумал что весь код в цикле работает.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / cURL в цикле / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]