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

PHP cURL无法解析api.mailjet.com:浏览器失效终端正常求助

PHP cURL DNS解析问题:浏览器执行失败但终端正常

在PHP中遇到持续性cURL问题:通过浏览器运行PHP脚本发起cURL请求时,报错“cURL Error: Could not resolve host: api.mailjet.com”,但终端执行相同cURL命令完全正常。

已排查步骤

  • 验证php.ini配置:
    • 已启用extension=curl;
    • 通过phpinfo()页面确认cURL已启用。
  • 检查文件权限与路径:
    • 为/var/www/htdocs及其子目录设置755权限;
    • 验证PHP脚本中的路径正确。
  • 调试DNS解析与网络连通性:
    • 脚本中添加调试信息,错误输出:
      Resolved IP for api.mailjet.com: api.mailjet.com - DNS resolution failed.
      cURL Error: Could not resolve host: api.mailjet.com
      
    • 调试脚本代码:
      <?php
      error_reporting(E_ALL);
      ini_set('display_errors', 1);
      chdir('/var/www/htdocs');
      $ip = gethostbyname('api.mailjet.com');
      echo "Resolved IP for api.mailjet.com: $ip<br>";
      require 'vendor/autoload.php';
      use \Mailjet\Resources;
      $mj = new \Mailjet\Client('your-api-key', 'your-secret-key', true, ['version' => 'v3.1']);
      $body = [ /*...*/ ];
      $response = $mj->post(Resources::$Email, ['body' => $body]);
      if ($response->success()) { echo "Email sent successfully!"; } else { echo "Failed to send email."; var_dump($response->getData()); }
      ?>
      
    • 终端通过nslookup和curl确认DNS解析正常:
      $ nslookup api.mailjet.com
      Server:         108.61.10.10
      Address:        108.61.10.10#53
      Non-authoritative answer:
      Name:   api.mailjet.com
      Address: 35.187.79.8
      
      $ curl -v https://api.mailjet.com/v3.1/send
      * Host api.mailjet.com:443 was resolved.
      * IPv6: (none)
      * IPv4: 35.187.79.8
      *   Trying 35.187.79.8:443...
      * Connected to api.mailjet.com (35.187.79.8) port 443
      ...
      Not authorized
      
  • 验证防火墙与网络配置:
    • 执行命令检查防火墙规则:
      $ doas pfctl -sr | grep block
      block drop all
      
  • 重启网络服务:
    $ sudo sh /etc/netstart
    

环境信息

  • OS: OpenBSD
  • PHP Version: 8.2
  • Web Server: Apache

DNS配置

nameserver 108.61.10.10
nameserver 9.9.9.9
nameserver 2001:19f0:300:1704::6
nameserver 2620:fe::fe

浏览器完整错误信息

Fatal error: Uncaught GuzzleHttp\Exception\ConnectException: cURL error 6: Could not resolve host: api.mailjet.com for https://api.mailjet.com/v3.1/send in /htdocs/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php:210 
Stack trace:
 #0 /htdocs/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php(158): GuzzleHttp\Handler\CurlFactory::createRejection()
 #1 /htdocs/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php(110): GuzzleHttp\Handler\CurlFactory::finishError()
 #2 /htdocs/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php(47): GuzzleHttp\Handler\CurlFactory::finish()
 #3 /htdocs/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php(28): GuzzleHttp\Handler\CurlHandler->__invoke()
 #4 /htdocs/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php(48): GuzzleHttp\Handler\Proxy::GuzzleHttp\Handler\{closure}()
 #5 /htdocs/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php(64): GuzzleHttp\Handler\Proxy::GuzzleHttp\Handler\{closure}()
 #6 /htdocs/vendor/guzzlehttp/guzzle/src/Middleware.php(31): GuzzleHttp\PrepareBodyMiddleware->__invoke()
 #7 /htdocs/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php(71): GuzzleHttp\Middleware::GuzzleHttp\{closure}()
 #8 /htdocs/vendor/guzzlehttp/guzzle/src/Middleware.php(66): GuzzleHttp\RedirectMiddleware->__invoke()
 #9 /htdocs/vendor/guzzlehttp/guzzle/src/HandlerStack.php(75): GuzzleHttp\Middleware::GuzzleHttp\{closure}()
 #10 /htdocs/vendor/guzzlehttp/guzzle/src/Client.php(333): GuzzleHttp\HandlerStack->__invoke()
 #11 /htdocs/vendor/guzzlehttp/guzzle/src/Client.php(169): GuzzleHttp\Client->transfer()
 #12 /htdocs/vendor/guzzlehttp/guzzle/src/Client.php(189): GuzzleHttp\Client->requestAsync()
 #13 /htdocs/vendor/mailjet/mailjet-apiv3-php/src/Mailjet/Request.php(238): GuzzleHttp\Client->request()
 #14 /htdocs/vendor/guzzlehttp/guzzle/src/ClientTrait.php(95): Mailjet\Request->request()
 #15 [internal function]: Mailjet\Request->post()
 #16 /htdocs/vendor/mailjet/mailjet-apiv3-php/src/Mailjet/Request.php(140): call_user_func()
 #17 /htdocs/vendor/mailjet/mailjet-apiv3-php/src/Mailjet/Client.php(342): Mailjet\Request->call()
 #18 /htdocs/vendor/mailjet/mailjet-apiv3-php/src/Mailjet/Client.php(99): Mailjet\Client->_call()
 #19 /htdocs/test-mailjet.php(31): Mailjet\Client->post()
 #20 {main} thrown in /htdocs/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php on line 210

希望得到关于浏览器中cURL请求失败但终端正常的原因分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 04:42:04