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 --version
和 php --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论坛系统的方法详解
sh 将现有的本地WordPress站点克隆到新文件夹。您必须使用Laravel Valet或Valet +作为您当地的开发环境