You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用drupal_http_request()调用API:本地正常服务器却报连接超时(错误码-110)

解决Drupal drupal_http_request() 服务器连接超时(错误码-110)问题

遇到本地运行正常,但部署到服务器后调用API出现Connection timed out(错误码-110)的情况,大概率是服务器环境的网络或配置限制导致的,我给你几个排查和解决的方向:

  • 先确认PHP超时配置是否真的生效
    有些服务器(尤其是共享主机)会限制用户修改default_socket_timeout,或者全局配置的超时时间比你设置的120秒更短。你可以在服务器上创建一个phpinfo.php文件,内容如下:

    <?php phpinfo(); ?>
    

    访问这个文件,搜索default_socket_timeout查看实际生效的值,同时确认allow_url_fopen处于开启状态——drupal_http_request()依赖这个配置才能发起HTTP请求。

  • 检查服务器的网络连通性
    本地能访问API不代表服务器也能,很可能是服务器的防火墙、安全组或者网络策略阻止了出站请求。你可以在服务器终端执行curl命令测试:

    curl -v -m 120 https://你的目标API地址
    

    观察输出,如果出现连接超时、拒绝连接的提示,说明是网络层面的问题,需要联系服务器管理员开放对应端口(通常是80或443)的出站权限。

  • 直接在drupal_http_request()调用中指定超时
    有时候Drupal全局配置的$conf['http_request_timeout']可能没被正确加载,你可以尝试在调用时直接传入超时参数,优先级会高于全局配置:

    $request_options = array(
      'timeout' => 120, // 直接设置超时时间
    );
    $result = drupal_http_request('https://你的目标API地址', $request_options);
    
  • 排查PHP扩展和版本问题
    老版本的PHP或curl扩展可能存在兼容性问题,导致无法正常建立连接。在服务器终端执行以下命令检查:

    php -v # 查看PHP版本
    php -m | grep curl # 确认curl扩展是否启用
    

    如果curl未启用,需要在PHP配置中开启;如果PHP版本过老(比如低于7.0),建议升级到稳定版本,确保支持目标API使用的TLS协议(比如TLS 1.2+)。

  • 尝试替代的HTTP客户端
    如果drupal_http_request()始终无法解决问题,可以考虑使用更灵活的HTTP客户端。比如Drupal 8及以上版本自带Guzzle,你可以直接调用:

    $client = \Drupal::httpClient();
    try {
      $response = $client->request('GET', 'https://你的目标API地址', [
        'timeout' => 120,
        'connect_timeout' => 60, // 单独设置连接阶段的超时
      ]);
      $body = $response->getBody()->getContents();
    } catch (\GuzzleHttp\Exception\RequestException $e) {
      // 捕获错误并处理
      $error = $e->getMessage();
    }
    

    或者直接使用原生curl函数,能获取更详细的错误信息,方便排查问题。

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

火山引擎 最新活动