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

DVLA API本地正常 部署至生产服务器后连接失败求助

排查Krystal主机上WordPress代理插件无法连接DVLA API的问题

根据你描述的情况,核心问题是生产服务器上Curl无法建立到DVLA API的443端口连接,超时报错。本地环境正常说明代码逻辑没问题,问题大概率出在生产服务器的网络配置或SSL环境上,以下是具体排查和修复步骤:

1. 验证服务器出站443端口是否真的开放

虽然主机商说已配置,但实际连接失败可能是防火墙/安全组未放行。你可以:

  • 通过SSH登录服务器,执行命令测试直接连接:
    curl -v https://driver-vehicle-licensing.api.gov.uk/vehicle-enquiry/v1/vehicles
    
  • 如果没有SSH权限,可以在插件代码里临时添加这段命令的执行逻辑,捕获输出日志:
    $test_output = shell_exec('curl -v https://driver-vehicle-licensing.api.gov.uk/vehicle-enquiry/v1/vehicles 2>&1');
    error_log('DVLA API test output: ' . $test_output);
    

如果测试结果显示连接被拒绝/超时,直接反馈给主机商,要求他们确认出站443端口的放行状态。

2. 检查Curl的SSL证书配置

部分主机的Curl环境可能缺少正确的CA根证书,导致SSL握手失败(错误提示可能显示为连接失败,但实际是SSL层面的问题)。你可以:

  • 在Curl请求中强制指定WordPress自带的CA证书路径:
    curl_setopt($ch, CURLOPT_CAINFO, ABSPATH . WPINC . '/certificates/ca-bundle.crt');
    
  • 临时关闭SSL验证(仅用于测试,生产环境不要保留),确认是否是证书问题:
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    

如果关闭SSL验证后能正常连接,说明是CA证书配置问题,保留指定CA证书的代码即可。

3. 优化Curl超时参数

当前超时时间过长(132秒),设置更合理的超时能更快定位问题,同时避免用户长时间等待:

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // 连接超时10秒
curl_setopt($ch, CURLOPT_TIMEOUT, 20); // 整个请求的总超时20秒

4. 确认是否需要配置出站代理

有些主机商会要求所有出站请求通过内部代理服务器,你需要联系主机商确认:

  • 代理服务器地址和端口
  • 是否需要用户名/密码认证
    如果需要,在Curl中添加代理配置:
curl_setopt($ch, CURLOPT_PROXY, '代理地址');
curl_setopt($ch, CURLOPT_PROXYPORT, 代理端口);
// 若需要认证
curl_setopt($ch, CURLOPT_PROXYUSERPWD, '用户名:密码');

5. 检查DVLA API的IP访问限制

DVLA API可能对陌生IP有访问拦截,你可以:

  • 登录DVLA开发者后台,查看是否有IP白名单设置,将生产服务器的IP添加进去
  • 联系DVLA技术支持,确认你的服务器IP是否被列入拦截列表

调整后的插件代码示例

结合以上优化点,你的Curl请求代码可以修改为:

function dvla_proxy_request($vehicle_data) {
    $api_url = 'https://driver-vehicle-licensing.api.gov.uk/vehicle-enquiry/v1/vehicles';
    $api_key = '你的API密钥';

    $ch = curl_init($api_url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($vehicle_data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    // 设置超时参数
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_TIMEOUT, 20);
    
    // 指定WordPress自带CA证书
    curl_setopt($ch, CURLOPT_CAINFO, ABSPATH . WPINC . '/certificates/ca-bundle.crt');
    
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'x-api-key: ' . $api_key
    ));

    $response = curl_exec($ch);
    if(curl_errno($ch)) {
        $error_msg = 'Curl错误(' . curl_errno($ch) . '): ' . curl_error($ch);
        error_log($error_msg);
        // 调试阶段可以返回具体错误,生产环境替换为自定义提示
        // return $error_msg;
        return 'failed to retrieve data';
    }
    curl_close($ch);
    return $response;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:13:24