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
相关产品推荐
相关产品推荐

