为了账号安全,请及时绑定邮箱和手机立即绑定

PHP cURL:无法解析主机(通过 VPN)

PHP cURL:无法解析主机(通过 VPN)

PHP
犯罪嫌疑人X 2022-07-22 10:46:35
我远程工作,可以通过 VPN 访问内部服务器。当我的 VPN 连接建立后,我可以通过 curl 访问我的网络服务器:curl http://sub.mydomain.com我还可以在浏览器中访问http://sub.mydomain.com. 所以这似乎不是网络服务器本身的 DNS 问题。然而,当开发我的 Laravel 4.2 应用程序 (PHP 5.6) 通过 Apache 在本地提供服务时,phpcurl_exec无法解析主机。奇怪的是,phpgethostbyname($hostname)正确地解析了主机。我已尝试强制使用 IPv4,因为我已阅读 IPv6 可能会导致此类失败而没有成功。// works$ip = gethostbyname($hostname);$ch = curl_init();curl_setopt($ch, CURLOPT_URL, "http://$ip/path");curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);curl_exec($ch);// does NOT work$ch = curl_init();curl_setopt($ch, CURLOPT_URL, "http://$hostname/path");curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);curl_exec($ch);这让我不知所措。我不明白 PHP curl 如何处理 DNS 解析(显然不是gethostbyname)。我也不完全了解专用网络上的 DNS 查找首先是如何工作的。所以我真的不知道去哪里找 PHP curl 来解析我的私人主机。
查看完整描述

1 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

命令行curl解析了主机。浏览器解析主机。只有 PHP curl 无法解决它。

最终,问题归结为 curl 配置。我使用自制软件安装了 PHP,并将其作为依赖项安装curl-openssl以供 PHP 使用。此 curl 安装由 brew 公式配置以c-ares用于域名解析。我不知道它是如何工作的,但这个 VPN DNS 显然是一个边缘情况,它在 OS X 上无法正确处理(可能是因为 OS X 在保持最新c-ares状态方面做得很糟糕)。/etc/resolv.conf

/usr/bin/curl另一方面,被配置为使用本机 OS X 解析器。这与 PHPgethostbyname和 Web 浏览器使用的解析器相同,这解释了为什么它们都按预期工作。

$ brew uninstall --ignore-dependencies curl-openssl

这通过转储这个“损坏的” curl 安装解决了我的问题。我不确定回退机制是如何工作的,但我相信 PHP 现在正在使用/usr/bin/curl,因为我没有其他安装curl(我知道)并且现在curl列出的版本与之前没有匹配。phpinfo()/usr/bin/curl


查看完整回答
反对 回复 2022-07-22
  • 1 回答
  • 0 关注
  • 254 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信