cURL + Laravel Valet + dnsmasq 不工作

Posted

技术标签:

【中文标题】cURL + Laravel Valet + dnsmasq 不工作【英文标题】:cURL + Laravel Valet + dnsmasq not working 【发布时间】:2019-07-08 08:45:08 【问题描述】:

当我执行一个 php 脚本,该脚本运行一个 cURL 请求到一个 .test 域,该域是在我的 Mac 上使用 Laravel Valet/dnsmasq 设置的,我打印了这个错误:

无法解析: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);

【问题讨论】:

你能分享你的 PHP curl 代码吗? 没有你的 php curl 代码很难说什么 我已经更新了代码。 试试这个:***.com/questions/54688451/… 【参考方案1】:

这个问题是由 curl 版本引起的,你可以从终端检查你的 curl 版本吗

curl --versionphp --ri curl

当您运行php --ri curl 时,您将看到cURL Information => 7.63.0 这一行。

然后你可以比较你的版本,你会看到哪个 curl 版本不能与 dnsmasq 一起工作。

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


为了解决这个问题:

你可以卸载curl-openssl,这个命令会删除最新版本的curl-openssl:

brew uninstall curl-openssl --ignore-dependencies

然后重启php:

brew services restart php

重启后php会看到curl是/usr/bin/curl,这个版本可以访问本地域。

【讨论】:

我已经卸载了 curl-openssl(它是 7.64),但它仍然不能与另一个 7.54 的 curl 一起使用。我重新启动了代客和 php。 为我解决了。应该是公认的答案!非常感谢队友! 如 Leo Moraes 的回答所述,需要代客重启,效果很好 我几天来一直在寻找解决方案。 brew uninstall curl-openssl --ignore-dependencies 对我有用。非常感谢你 很遗憾,Apache 无法再启动:httpd: Syntax error on line 194 of /usr/local/etc/httpd/httpd.conf: Cannot load /usr/local/opt/php@7.3/lib/httpd/modules/libphp7.so into server: dlopen(/usr/local/opt/php@7.3/lib/httpd/modules/libphp7.so, 10): Symbol not found: _curl_mime_addpart\n Referenced from: /usr/local/opt/php@7.3/lib/httpd/modules/libphp7.so\n Expected in: /usr/lib/libcurl.4.dylib\n in /usr/local/opt/php@7.3/lib/httpd/modules/libphp7.so【参考方案2】:

....重启后php会看到curl是/usr/bin/curl,这个版本可以访问本地域。

代客重启后:代客重启

【讨论】:

【参考方案3】:

在我的 DNS 设置中添加 127.0.0.1 为我解决了这个问题。 即System Preferences -> Network -> Advance -> DNS

然后运行valet restart

【讨论】:

【参考方案4】:

我通过将domain.test 添加到/etc/hosts 解决了这个问题

即在 hosts 文件中添加:127.0.0.1 domain.test

【讨论】:

【参考方案5】:

刚刚花了最后一个小时。我通过 PHP 的 curl 遇到了类似的问题,而没有专门为 SSL 使用 Valet 解决。我尝试更改 curl-openssl 版本并在主机文件中设置我的域等。除了以下内容之外,没有其他工作:

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

这是由于 Curl 未验证代客 SSL。一旦我将此选项添加到我的 curl 请求中,我就能够从我的本地代客 url 获取数据。

【讨论】:

不知道为什么这被否决了。上面被广泛接受的答案没有理由证明因果关系,而这个答案感觉离这样做更近了(尽管它对我不起作用)。

以上是关于cURL + Laravel Valet + dnsmasq 不工作的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Valet php-fpm 已经在监听 valet sock

sh 安装并激活WooCommerce和Storefront的新WordPress站点。您必须安装Laravel Valet或Valet +

在Mac开发环境Laravel Valet中配置运行Flarum论坛系统的方法详解

设置 Laravel Valet Mysql 问题

sh 将现有的本地WordPress站点克隆到新文件夹。您必须使用Laravel Valet或Valet +作为您当地的开发环境

Laravel 4.2 + Laravel Valet + PHP 7 = 需要 Mcrypt PHP 扩展