You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Zebra_cURL并发请求达500次时出现CURLE_COULDN'T_CONNECT错误求助

解决Zebra_cURL并行请求大量URL时的连接超时/无法连接问题

我最近在用Zebra_cURL处理一批约2300个URL的并行请求,结果当请求量达到500次左右时,系统开始抛出CURLE_COULDN'T_CONNECT错误,查看详细错误信息后发现实际是CURLE_OPERATION_TIMEDOUT(错误码28)。我已经确认所有目标URL都能正常访问,尝试了论坛里的几种方案也没解决问题,最终通过调整Zebra_cURL的线程数和暂停间隔搞定了,分享一下我的经历:

初始代码

我最开始的实现代码完全按照Zebra_cURL文档规范编写:

$curl1 = new Zebra_cURL();
$curl1->cache('cache', 3600);
$curl1->option(CURLOPT_CONNECTTIMEOUT, 20);
$curl1->option(CURLOPT_FOLLOWLOCATION, 1);
$curl1->ssl(true);
$curl1->get($com_url_arr_glo, 'getsizemk');

其中$com_url_arr_glo是包含2300个目标URL的数组,getsizemk是处理每个请求结果的回调函数。

错误详情

返回的错误数组显示请求超时(total_time达到30秒),且没有获取到任何响应内容:

[info] => Array (
    [original_url] => https://www.masterkreatif.com/page/12
    [url] => https://www.masterkreatif.com/page/12
    [content_type] =>
    [http_code] => 0
    [header_size] => 0
    [request_size] => 162
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 30.109
    [namelookup_time] => 1.0E-6
    [connect_time] => 0.406
    [pretransfer_time] => 0.906
    [size_upload] => 0
    [size_download] => 0
    [speed_download] => 0
    [speed_upload] => 0
    [download_content_length] => -1
    [upload_content_length] => -1
    [starttransfer_time] => 0
    [redirect_time] => 0
    [redirect_url] =>
    [primary_ip] => 104.24.117.230
    [certinfo] => Array ( )
    [primary_port] => 443
    [local_ip] => 192.168.43.56
    [local_port] => 25775
)
[headers] => Array (
    [last_request] => Array (
        [0] => Array (
            [Request Method] => GET /page/12 HTTP/1.1
            [Host] => www.masterkreatif.com
            [User-Agent] => Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0)
            [Accept] => */*
            [Accept-Encoding] => gzip,deflate
        )
    )
    [responses] => Array ( )
)
[body] =>
[response] => Array (
    [0] => CURLE_OPERATION_TIMEDOUT
    [1] => 28
)

解决方案

我尝试给Zebra_cURL添加了线程数限制和请求间隔配置,每处理30个URL后暂停5秒,问题立刻得到解决。修改后的代码如下:

$curl1 = new Zebra_cURL();
$curl1->cache('cache', 3600);
$curl1->option(CURLOPT_CONNECTTIMEOUT, 20);
$curl1->option(CURLOPT_FOLLOWLOCATION, 1);
$curl1->ssl(true);
// 添加的关键配置
$curl1->pause_interval = 5;  // 每批请求处理完成后暂停5秒
$curl1->threads = 30;        // 每次并行处理30个请求
$curl1->get($com_url_arr_glo, 'getsizemk');

这个调整的核心逻辑是:

  • 限制并行请求数,避免短时间内发送大量请求导致目标服务器触发限流机制,或者本地网络连接资源耗尽
  • 每批请求后添加暂停时间,给目标服务器和本地网络留出缓冲恢复的时间

虽然我不确定这个配置是否适用于所有同类的连接超时/无法连接问题,但在我的场景中确实完美解决了问题。

内容的提问来源于stack exchange,提问作者The Bang Bandit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:22:38