Собственно есть скрипт. PHP: $old = c("edit4")->text; $next = c("edit5")->text; $comment = c("memo1")->text; $login = c("edit2")->text; $pass = c("edit3")->text; $xy = rand(0,30); $url = c("edit1")->text; for($i=$old;$i<$next;$i++) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "$url/index.php"); curl_setopt ($ch, CURLOPT_POST, 1); curl_setopt ($ch, CURLOPT_POSTFIELDS, "login_name=$login&login_password=$pass&login=submit&image.x=$xy&image.y=$xy"); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cook.txt'); curl_setopt ($ch, CURLOPT_COOKIEFILE, 'cook.txt'); $result = curl_exec ($ch); curl_close ($ch); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "$url/engine/ajax/addcomments.php"); curl_setopt ($ch, CURLOPT_POST, 1); curl_setopt ($ch, CURLOPT_POSTFIELDS, "comments=$comment&name=$login&mail=&skin=Default&allow_subscribe=0&post_id=$i&rndval=1298206420478"); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cook.txt'); curl_setopt ($ch, CURLOPT_COOKIEFILE, 'cook.txt'); $result_pm = curl_exec ($ch); curl_close ($ch); print_r("Добавлено в id=$i "); ///print_r($result_pm); } Отправляет сообщения в новости, но очень медленно. Подскажите пожалуйста как сделать что бы ПОСТ запрос передавался в несколько потоков? В гугл не посылайте, перекурил всё что можно но подробного так и ничего не нашел или всё запутанно.
PHP: $old = c("edit4")->text; $next = c("edit5")->text; $comment = c("memo1")->text; $login = c("edit2")->text; $pass = c("edit3")->text; $xy = rand(0,30); $url = c("edit1")->text; $ch1 = curl_init(); $ch2 = curl_init(); curl_setopt($ch1, CURLOPT_URL, "$url/index.php"); curl_setopt ($ch1, CURLOPT_POST, 1); curl_setopt ($ch1, CURLOPT_POSTFIELDS, "login_name=$login&login_password=$pass&login=submit&image.x=$xy&image.y=$xy"); curl_setopt ($ch1, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch1, CURLOPT_COOKIESESSION, TRUE); curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt ($ch1, CURLOPT_COOKIEJAR, 'cook.txt'); curl_setopt ($ch1, CURLOPT_COOKIEFILE, 'cook.txt'); curl_setopt($ch2, CURLOPT_URL, "$url/engine/ajax/addcomments.php"); curl_setopt ($ch2, CURLOPT_POST, 1); for($i=$old;$i<$next;$i++) { curl_setopt ($ch2, CURLOPT_POSTFIELDS, "comments=$comment&name=$login&mail=&skin=Default&allow_subscribe=0&post_id=$i&rndval=1298206420478"); curl_setopt ($ch2, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch2, CURLOPT_COOKIESESSION, TRUE); curl_setopt($ch2, CURLOPT_HEADER, 0); curl_setopt ($ch2, CURLOPT_COOKIEJAR, 'cook.txt'); curl_setopt ($ch2, CURLOPT_COOKIEFILE, 'cook.txt'); //create the multiple cURL handle $mh = curl_multi_init(); //add the two handles curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $running=null; //execute the handles do { usleep(10); curl_multi_exec($mh,$running); } while ($running > 0); //close the handles curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh); // print_r("Добавлено в id=$i //"); ///print_r($result_pm); } Сделал по мануалу ничего не изменилось.
DaeWoo you doing it wrong. Ваша задача создать N хендлов курла, зарегистрировать их в curl_multi и запустить обработку. Сейчас же у вас не менее однопоточный код, чем был раньше. Грубо говоря: PHP: $ch = curl_init('login_page'); // <-- Логинимся //create the multiple cURL handle $mh = curl_multi_init(); $mult = array(); for($i=0;$i<=10;$i++) { $mult[$i] = curl_init(); // Прочие параметры от курла curl_multi_add_handle($mh, $mult[$i]); } // Запускаем одновременную обработку $running=null; //execute the handles do { usleep(10); curl_multi_exec($mh,$running); } while ($running > 0); for($i=0;$i<=10;$i++) { curl_multi_remove_handle($mh, $multi[$i]); } curl_multi_close($mh); Однако не забывайте, что сервер может быть недоволен множественными коннектами и/или постингом
Получилось вот такое чудо PHP: $ch1 = curl_init(); $ch2 = curl_init(); curl_setopt($ch1, CURLOPT_URL, "$url/index.php"); curl_setopt ($ch1, CURLOPT_POST, 1); curl_setopt ($ch1, CURLOPT_POSTFIELDS, "login_name=$login&login_password=$pass&login=submit&image.x=$xy&image.y=$xy"); curl_setopt ($ch1, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch1, CURLOPT_COOKIESESSION, TRUE); curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt ($ch1, CURLOPT_COOKIEJAR, 'cook.txt'); curl_setopt ($ch1, CURLOPT_COOKIEFILE, 'cook.txt'); curl_setopt($ch2, CURLOPT_URL, "$url/engine/ajax/addcomments.php"); curl_setopt ($ch2, CURLOPT_POST, 1); for($i=$old;$i<$next;$i++) { curl_setopt ($ch2, CURLOPT_POSTFIELDS, "comments=$comment&name=$login&mail=&skin=Default&allow_subscribe=0&post_id=$i&rndval=1298206420478"); curl_setopt ($ch2, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch2, CURLOPT_COOKIESESSION, TRUE); curl_setopt($ch2, CURLOPT_HEADER, 0); curl_setopt ($ch2, CURLOPT_COOKIEJAR, 'cook.txt'); curl_setopt ($ch2, CURLOPT_COOKIEFILE, 'cook.txt'); } //create the multiple cURL handle $mh = curl_multi_init(); $mult = array(); for($a=0;$a<=10;$a++) { $mult[$a] = curl_init(); //add the two handles curl_multi_add_handle($mh, $ch1, $multi[$a]); curl_multi_add_handle($mh, $ch2, $multi[$a]); } $running=null; //execute the handles do { usleep(10); curl_multi_exec($mh,$running); } while ($running > 0); //close the handles for($a=0;$a<=10;$a++) { curl_multi_remove_handle($mh, $ch1, $multi[$a]); curl_multi_remove_handle($mh, $ch2, $multi[$a]); } curl_multi_close($mh); // print_r("OK id=$i //"); ///print_r($result_pm); Но при запуске ругается на вот эту строку Что не так?
DaeWoo не пытайтесь совершать "магические" пассы руками над кодом. Попытайтесь прочитать документацию. http://php.net/curl_multi_add_handle и заодно http://php.net/curl_multi_remove_handle - обе функции принимают ровно 2 параметра
Если тяжело разобраться как написать самому, возьмите готовое решение, класс: http://forum.antichat.ru/showpost.php?p=2569506&postcount=21
DaeWoo здесь не место торговле. Пробуйте: PHP: $ch1 = curl_init(); curl_setopt($ch1, CURLOPT_URL, $url."/index.php"); curl_setopt($ch1, CURLOPT_POST, 1); curl_setopt($ch1, CURLOPT_POSTFIELDS, "login_name=".$login."&login_password=".$pass."&login=submit&image.x=".$xy."&image.y=".$xy); curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch1, CURLOPT_COOKIESESSION, TRUE); curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt($ch1, CURLOPT_COOKIEJAR, 'cook.txt'); curl_setopt($ch1, CURLOPT_COOKIEFILE, 'cook.txt'); curl_exec($ch1); $mult = array(); $mh = curl_multi_init(); for($i=$old;$i<$next;$i++) { $mult[$i] = curl_init(); curl_setopt ($mult[$i], CURLOPT_RETURNTRANSFER, 1); curl_setopt ($mult[$i], CURLOPT_COOKIESESSION, TRUE); curl_setopt ($mult[$i], CURLOPT_HEADER, 0); curl_setopt ($mult[$i], CURLOPT_COOKIEJAR, 'cook.txt'); curl_setopt ($mult[$i], CURLOPT_COOKIEFILE, 'cook.txt'); curl_setopt ($mult[$i], CURLOPT_URL, $url.'/engine/ajax/addcomments.php'); curl_setopt ($mult[$i], CURLOPT_POST, 1); curl_setopt ($mult[$i], CURLOPT_POSTFIELDS, "comments=".$comment."&name=".$login."&mail=&skin=Default&allow_subscribe=0&post_id=".$i."&rndval=1298206420478"); curl_multi_add_handle($mh, $multi[$a]); } //execute the handles $running=null; do { usleep(1000); curl_multi_exec($mh,$running); } while ($running > 0); //close the handles for($i=$old;$i<$next;$i++) { curl_multi_remove_handle($mh, $multi[$i]); } curl_multi_close($mh); curl_close($ch1);
DaeWoo Только чувствую все равно работать не будет и серв отфутболит частые попытки соедниения PHP: <?PHP $ch1 = curl_init(); curl_setopt($ch1, CURLOPT_URL, $url."/index.php"); curl_setopt($ch1, CURLOPT_POST, 1); curl_setopt($ch1, CURLOPT_POSTFIELDS, "login_name=".$login."&login_password=".$pass."&login=submit&image.x=".$xy."&image.y=".$xy); curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch1, CURLOPT_COOKIESESSION, TRUE); curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt($ch1, CURLOPT_COOKIEJAR, 'cook.txt'); curl_setopt($ch1, CURLOPT_COOKIEFILE, 'cook.txt'); curl_exec($ch1); $mult = array(); $mh = curl_multi_init(); for($i=$old;$i<$next;$i++) { $mult[$i] = curl_init(); curl_setopt ($mult[$i], CURLOPT_RETURNTRANSFER, 1); curl_setopt ($mult[$i], CURLOPT_COOKIESESSION, TRUE); curl_setopt ($mult[$i], CURLOPT_HEADER, 0); curl_setopt ($mult[$i], CURLOPT_COOKIEJAR, 'cook.txt'); curl_setopt ($mult[$i], CURLOPT_COOKIEFILE, 'cook.txt'); curl_setopt ($mult[$i], CURLOPT_URL, $url.'/engine/ajax/addcomments.php'); curl_setopt ($mult[$i], CURLOPT_POST, 1); curl_setopt ($mult[$i], CURLOPT_POSTFIELDS, "comments=".$comment."&name=".$login."&mail=&skin=Default&allow_subscribe=0&post_id=".$i."&rndval=1298206420478"); curl_multi_add_handle($mh, $mult[$i]); } //execute the handles $running=null; do { usleep(1000); curl_multi_exec($mh,$running); } while ($running > 0); //close the handles for($i=$old;$i<$next;$i++) { curl_multi_remove_handle($mh, $mult[$i]); } curl_multi_close($mh); curl_close($ch1);
Скрипт заработал, но что то особых изменений я не увидел. Тоесть программа при выполнении подвисала на несколько секунд так и сейчас. Может что то не так?