cURL + Laravel Valet + dnsmasq无法工作

16

当我执行一个运行cURL请求到我在Mac上使用Laravel Valet/dnsmasq建立的.test域名的PHP脚本时,我会得到以下错误信息:

无法解析:mydomain.test(未找到域名)

当我在浏览器中测试该域名时,一切正常。
当我在终端中运行curl -Ik https://mydomain.test时,我得到了HTTP/2 200代码,所以一切正常。
当我在终端中运行curl -k https://mydomain.test时,我得到了页面的源代码,所以也是正常的。

为什么从PHP的cURL不起作用?我很绝望...

更新:

由于广大用户的要求;-),这是我的cURL代码。你不能再更简单了:

try {
    $ch = curl_init( "http://mydomain.test" );
    curl_exec( $ch );
    dump(curl_error($ch));
    curl_close( $ch );
} catch (Exception $e) {
    var_dump($e);
}

1
你能分享一下你的PHP curl代码吗? - Lalit Arora
没有你的 PHP curl 代码,很难说出什么。 - MD. Jubair Mizan
我已经更新了代码。 - Maxime Freschard
尝试这个:https://dev59.com/DlQJ5IYBdhLWcg3wCxe3#54908305 - S.S.Prabhu
5个回答

49

这个问题是由curl版本引起的,您可以通过终端检查 curl 版本来检查:

curl --versionphp --ri curl

当您运行 php --ri curl 命令时,您将看到这行:cURL Information => 7.63.0

然后您可以比较您的版本并确定哪个curl版本与dnsmasq不兼容。

我也遇到了这个问题,我的curl版本是7.64.0在php中。


解决该问题的方法:

您可以卸载curl-openssl,此命令将删除curl-openssl的最新版本:

brew uninstall curl-openssl --ignore-dependencies

然后重新启动 PHP:

brew services restart php

重新启动后,php将看到curl,即/usr/bin/curl,此版本可以访问本地域。


1
我已经卸载了curl-openssl(版本为7.64),但它仍然无法与另一个curl(版本为7.54)一起使用。我已重启valet和php。 - Maxime Freschard
对我很有帮助。应该被接受为答案!非常感谢,伙计! - tchauviere
2
需要重新启动valet,正如Leo Moraes的回答所述,它非常有效。 - efraim
我寻找解决方案已经好几天了。使用 brew uninstall curl-openssl --ignore-dependencies 对我很有用。非常感谢你。 - Bilal Şimşek
2
很遗憾,Apache无法启动了:httpd:/usr/local/etc/httpd/httpd.conf的第194行语法错误:无法将/usr/local/opt/php@7.3/lib/httpd/modules/libphp7.so加载到服务器中:dlopen(/usr/local/opt/php@7.3/lib/httpd/modules/libphp7.so,10):找不到符号:_curl_mime_addpart\n 参考自:/usr/local/opt/php@7.3/lib/httpd/modules/libphp7.so\n 应在:/usr/lib/libcurl.4.dylib\n中找到,而在/usr/local/opt/php@7.3/lib/httpd/modules/libphp7.so中却找不到。 - Marian
Apache 对我也无法启动。和上面一样的错误。所以这个答案解决了一个问题,但在 PHP 7.3 上引入了另一个问题。 - Moshe Weitzman

7

重新启动后,php将看到curl位于/usr/bin/curl,此版本可以访问本地域名。

同时重新启动valet:valet restart


5

127.0.0.1 添加到我的DNS设置中,解决了我的问题。 即 系统偏好设置 -> 网络 -> 高级 -> DNS

之后运行 valet restart


3

我通过在/etc/hosts文件中添加domain.test来解决了这个问题。

也就是说,在hosts文件中添加:127.0.0.1 domain.test


2

我刚刚花了一个小时在这上面。我在使用PHP的curl时遇到了与Valet特别是SSL不兼容的类似问题。我尝试更改curl-openssl版本,还将我的域名设置到host文件中等等,但都没有起作用。唯一有效的方法如下:

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

这是由于Valet SSL未经Curl验证。一旦我在curl请求中添加了此选项,我就能够从本地valet url获取数据。

不知道为什么这个被踩了。上面广为接受的答案没有提出因果关系的论据,而这个答案感觉更接近于这样做(尽管对我没用)。 - jeff-h
你的回复可能为我节省了几个小时的时间。谢谢! - Altin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接