Я пытаюсь бомбардировать свой сайт, используя одновременно 50-100 + curl connections
,
Я сделал список URL-адресов в массиве [идентификаторы постов являются инкрементными], поэтому один и тот же URL-адрес не будет доступен дважды, поскольку на сервере включено кэширование.
Я хочу сделать это чисто в php-curl
как я знаком с php.
я посмотрел на stackoverflow и нашел это PHP: одновременно открывать URL для имитации атаки DOS?
но нет никакого решения для того, чтобы делать то, что я пытаюсь сделать. я не хочу использовать сторонние инструменты. так как некоторые для Windows, некоторые для Linux, некоторые устарели, в то время как я более знаком с php.
Прямо сейчас мой код ожидает закрытия текущих соединений, а затем запускает новые. пока я не хочу ждать закрытия открытых соединений и просто продолжать новые подключения.
вот мой код до сих пор.
<?php
$my_site_url = 'https://example.com/item/post_id';
$threads = 80;
$all_post_ids = array();
//get all ids in the array
for($int = 50; $int <= 200000 ; $int++){
$all_post_ids[] = $int;
}
//printr($all_post_ids);
//make chunks from the big array
foreach(array_chunk($all_post_ids, $threads) as $post_ids_chunk) {
$ch = curl_multi_init();
foreach ($post_ids_chunk as $i => $each_id) {
$url = str_replace("post_id" , $each_id , $my_site_url) ;
echo $url."\n" ;
$conn[$i] = curl_init($url);
curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($conn[$i], CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($conn[$i], CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($conn[$i], CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36');
curl_setopt($conn[$i], CURLOPT_HEADER, 0);
curl_multi_add_handle($ch, $conn[$i]);
}
do {
$status = curl_multi_exec($ch, $active);
} while ($status === CURLM_CALL_MULTI_PERFORM || $active);
foreach ($post_ids_chunk as $i => $each_id){
//$header[$i] = curl_getinfo($conn[$i]);
//var_dump( $header[$i]);
//echo $header[$i]['http_code'];
//$received_data[$i] = curl_multi_getcontent($conn[$i]);
curl_multi_remove_handle($ch, $conn[$i]);
}
curl_multi_close($ch);
}
Так, как я могу не ждать, когда открытые соединения закрываются и запускаются новые, скажем, в секунду или как можно скорее.
Что мне здесь не хватает?
Спасибо за ваше время.
Задача ещё не решена.
Других решений пока нет …