Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [cURL] ошибка таймаута 
:(
    Опции темы
alligator
Дата 16.1.2007, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: нет
Всего: 1



Проблемка со скриптом использующим curl_multi_*
 отваливаеться с ошибкой
Connection time-out after 17533 ms

Опция прописана....
Код

curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT, 3000);


PM MAIL   Вверх
Mal Hack
Дата 16.1.2007, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 5
Всего: 261



Параметр таймаута задается в секундах.
PM ICQ   Вверх
alligator
Дата 16.1.2007, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: нет
Всего: 1



Ну дык и указано в секундах
PM MAIL   Вверх
Mal Hack
Дата 16.1.2007, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 5
Всего: 261



Ты указал 3000 секунд - это чуть меньше часа. Скрипт разорвал соединение через 17 секунд.
PM ICQ   Вверх
alligator
Дата 17.1.2007, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: нет
Всего: 1



Так это проблемку вроде решил , но теперь отваливаеться с ошибкой Empty reply from server
Решение пока не нашел
PM MAIL   Вверх
BoneHound
Дата 31.7.2008, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 31.7.2008

Репутация: нет
Всего: нет



Второй день бьюсь, никак победить не могу... помогите, кто чем может  

Значит, общая задача: сделать прокси-чекер. 
Споткнулся почти сразу же. Вот что удалось наваять: 

(php5):
Код

$started = time();
// checking proxies:
$proxy_list = explode("\n", str_replace("\r", '', $proxylist));
$proxy_count = count($proxy_list);
$curl_common_opt = array(    CURLOPT_URL => $dest_host.'/test.php',
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_HEADER => false,
            //CURLOPT_LOW_SPEED_LIMIT => 2048,
            //CURLOPT_LOW_SPEED_TIME => 10,
            CURLOPT_TIMEOUT => 30,
            //CURLOPT_CONNECTTIMEOUT => 10,
            CURLOPT_USERAGENT => 'Transferer sender',
            CURLOPT_POST => 1,
            CURLOPT_PROXYTYPE => CURLPROXY_SOCKS5);
$curl_master = curl_multi_init();
$curl_handlers = array();

for ($i = 0; $i < $proxy_count; $i++)
// preparing multi curl task:
{
    $curl_handlers[$i] = curl_init();
    curl_setopt_array($curl_handlers[$i],    $curl_common_opt +
                    array(CURLOPT_PROXY => $proxy_list[$i],
                    CURLOPT_PROXYUSERPWD => "user:password",
                    CURLOPT_POSTFIELDS => 'command=Test'));
    curl_multi_add_handle($curl_master, $curl_handlers[$i]);
}

$going = $proxy_count;
do
// implementing multi curl task:
{
    if (@file_exists(DIR_CONTROLERS."/stop")) die('Manual stop');

    curl_multi_exec($curl_master, $running);
    if ($running < $going)
    {
        echo ($going-$running)." proxy test completed. now testing ".$running." proxies<br>\n";
        $going = $running;
    }
    sleep(2);
    echo "ch prx ($running); time: ".time()."<br>\n";
}
while ($running > 0);

for($i = 0; $i < $proxy_count; $i++)
// capturing multi task results:
{
    $result = curl_multi_getcontent($curl_handlers[$i]);
    if (curl_errno($curl_handlers[$i]) || $result != 'Test OK')
    // if page was not got (proxy down):
    {
        if ($show_report) echo "Proxy ".$proxy_list[$i]." is down<br>\n";
        echo curl_error($curl_handlers[$i])."<br>\n";
        echo $result."<br>\n---------------------<br>\n";
        unset($proxy_list[$i]);
    }
    curl_multi_remove_handle($curl_master, $curl_handlers[$i]);
    curl_close($curl_handlers[$i]);
}
$proxy_list = array_merge($proxy_list, array());
echo "test took ".(time()-$started)." sec.<br>\n";
if (!count($proxy_list)) die("All proxies are down<br>\n");

die('test completed');


p.s. $dest_host в данном случае тот же, на котором размещен скрипт. 

Скрипт очень хорошо работает, если все прокси рабочие  Проверка занимает около 20 секунд. 

Трабл в следующем, как только один падает - время выполнения затягивается на 60-100 секунд. Причем зависание происходит на второй итерации цикла "implementing multi curl task", в строке "curl_multi_exec($curl_master, $running);". Как я понимаю, он наталкивается на нерабочий прокси, долбится к нему битых полторы минуты, и потом продолжает цикл. И тут - ох ты! оказывается тайм-аут то наступил еще Бог весть когда... так что (ха-ха) курл со спокойной совестью сообщает мне об этом занимательном факте. Мол, я тут полчаса пытался отправить запрос, но таймаут-то 30 секунд, так что - извини - ошибочка!

Внимание - вопрос! Как заставить его прекращать попытки соединения сразу же после наступления таймаута?

Создается впечатление, что я либо не нашел соответствующей опции/функции курла, либо он тупит по малу (многопотоковые функции курла вроде как еще экспериментальные и недокументированные)... Есть бредовая идея реализовать локальный парраллелизм через proc_open() и stream_select(), а в каждом потоке обычным образом брать тестовую страничку средствами cURL... но это ведь полный копец маразм.

P.S. запускать параллельно несколько скриптов не хочется - некрасиво ресурсы транжирить (как я понял, каждый такой поток будет жрать минимум 15мб памяти).

В-общем, варианты есть, но может кто подскажет - может можно без ковыряний в ухе пальцем ноги обойтись? Т.е. заставить работать как положено curl_multi...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0482 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.