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

PHP cURL请求出现SSL_write()错误(错误码55)求助

解决cURL SSL_write()错误(Error 55: bad write retry)

这个错误(error:1409F07F:SSL routines:ssl3_write_pending:bad write retry)对应cURL错误码55,本质是SSL连接写入阶段,curl尝试重写未完成的SSL数据时触发的异常,多和网络波动、连接复用状态异常或特定版本的cURL/OpenSSL兼容问题有关。结合你的环境(生产Linux服务器偶现,本地正常),可以尝试以下解决方案:

1. 禁用连接复用

生产环境中,连接复用可能导致旧连接处于异常状态,强制每次请求新建连接可以规避这个问题:
在curl选项数组中添加:

CURLOPT_FORBID_REUSE => true,

2. 调整SSL写入相关选项

OpenSSL 1.1.1p的某些场景下,空片段插入可能触发写入重试错误,通过SSL选项禁用该行为:

CURLOPT_SSL_OPTIONS => SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS,

如果PHP环境不识别SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS常量,直接用其数值0x00000800替代。

3. 优化网络超时与连接保活

生产网络波动可能导致写入超时,增加连接超时配置并启用TCP保活维持连接活性:

CURLOPT_CONNECTTIMEOUT => 10, // 连接超时时间(秒)
CURLOPT_TCP_KEEPALIVE => true,
CURLOPT_TCP_KEEPIDLE => 60, // 空闲60秒后开始发送保活包
CURLOPT_TCP_KEEPINTVL => 10, // 每10秒发送一次保活包

4. 升级或降级cURL/OpenSSL版本

curl 7.84.0与OpenSSL 1.1.1p的组合存在已知的兼容性问题,尝试:

  • 升级curl到7.85.0及以上版本
  • 升级OpenSSL到1.1.1q及以上版本
  • 或降级到更稳定的旧版本(如curl 7.83.0)

5. 检查目标服务器SSL配置

用OpenSSL命令测试目标服务器的TLSv1.2兼容性:

openssl s_client -connect example.com:443 -tls1_2

确认服务器支持TLSv1.2,且没有会话复用限制或过载导致的连接异常。

修改后的完整示例代码

$url = 'https://example.com/services/service-name';
$curl = curl_init();
curl_setopt_array($curl, array(
        CURLOPT_URL => $url,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $postData,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_CONNECTTIMEOUT => 10,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_SSL_VERIFYPEER => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2,
        CURLOPT_VERBOSE => true,
        CURLOPT_STDERR => $fp,
        CURLOPT_FORBID_REUSE => true,
        CURLOPT_TCP_KEEPALIVE => true,
        CURLOPT_TCP_KEEPIDLE => 60,
        CURLOPT_TCP_KEEPINTVL => 10,
        CURLOPT_SSL_OPTIONS => SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS,
));
$response = curl_exec($curl);

// 可选:添加错误重试逻辑
if(curl_errno($curl) === 55){
    // 重试1次
    curl_close($curl);
    $curl = curl_init();
    curl_setopt_array($curl, /* 重复上述选项 */);
    $response = curl_exec($curl);
}

curl_close($curl);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:15:38