php如何继续打开新连接而不是等待使用curl multi关闭打开的连接?

时间:2018-03-15 02:38:12

标签: php curl php-curl curl-multi

我正在尝试使用50-100 + curl connections同时轰炸我的网站。

我已经在数组中列出了URL列表[帖子ID是增量的],因此在服务器上启用缓存时,不会访问相同的URL两次。

我想在php-curl中完全这样做,因为我熟悉php。

我查看了stackoverflow并找到了这个PHP: Opening URLs concurrently to simulate a DOS attack?

但没有卷曲的解决方案来做我想做的事情。我不想使用第三方工具。有些用于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);

}

那么我怎么能不等待打开连接关闭并开始新的连接让我们说每秒或尽快。

我在这里缺少什么?

感谢您的时间。

0 个答案:

没有答案