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

CURL循环发送XML偶现443端口超时问题求助

解决CURL循环发送XML偶现连接超时问题

针对你遇到的循环发送XML请求时偶现端口443连接超时问题,给出以下具体解决建议:

  • 添加请求重试机制
    偶现超时大概率是网络波动导致,可在单次请求失败后自动重试(建议2-3次),重试前短暂休眠避免频繁请求:

    foreach($contents as $key=>$val){
        // 构建XML数据部分不变
        $maxRetries = 3;
        $retryCount = 0;
        $response = false;
        $err = '';
    
        do {
            $curl = curl_init();
            curl_setopt_array($curl, array(
                CURLOPT_URL => "https://example.com",
                CURLOPT_ENCODING => '',
                CURLOPT_MAXREDIRS => 10,
                CURLOPT_FOLLOWLOCATION => true,
                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_CUSTOMREQUEST => "POST",
                CURLOPT_POSTFIELDS => $data,
                CURLOPT_SSL_VERIFYPEER => 0,
                CURLOPT_HTTPHEADER => array("Content-Type: text/xml","User-Agent: Mozilla/5.0"),
                CURLOPT_TIMEOUT => 60,
                CURLOPT_CONNECTTIMEOUT => 45, // 延长连接超时时间到45秒
                CURLOPT_VERBOSE => true,
                CURLOPT_FAILONERROR => true,
            ));
            $response = curl_exec($curl);
            $err = curl_error($curl);
            curl_close($curl);
            
            $retryCount++;
            if ($err && $retryCount < $maxRetries) {
                usleep(1000000); // 重试前休眠1秒
            }
        } while ($err && $retryCount < $maxRetries);
    
        // 后续日志记录逻辑不变
        if($err){
            $logs = '[ '.date('Y-m-d H:i:s',time()).']   [ error  ] '.$err."\r\n"; 
            $logfile = fopen('E:\xampp\htdocs\project\errors_test.log','a','1');
            fwrite($logfile, $logs);
            fclose($logfile);
        }
    }
    
  • 指定DNS服务器解决解析问题
    偶现连接超时可能是DNS解析不稳定,手动设置可靠的DNS服务器:

    // 在curl_setopt_array中添加
    CURLOPT_DNS_SERVERS => '114.114.114.114,8.8.8.8',
    
  • 启用TCP保活与连接复用
    开启TCP保活机制,同时允许复用连接,减少每次请求的握手开销:

    // 在curl_setopt_array中添加
    CURLOPT_TCP_KEEPALIVE => true,
    CURLOPT_TCP_KEEPIDLE => 60, // 连接闲置60秒后发送保活包
    CURLOPT_TCP_KEEPINTVL => 10, // 保活包发送间隔10秒
    CURLOPT_FORBID_REUSE => false, // 允许复用连接
    CURLOPT_FRESH_CONNECT => false, // 不强制新建连接
    
  • 降低请求频率
    如果$contents数据量较大,频繁请求可能触发对方服务器限流,在每次请求后添加短暂延迟:

    // 在curl_close之后添加
    usleep(500000); // 休眠0.5秒
    
  • 排查服务器端限制
    若以上方法无效,建议联系example.com的服务提供商,确认是否存在并发连接数限制、防火墙临时拦截等情况。

内容的提问来源于stack exchange,提问作者anil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:57:34