我正在尝试使用CURL获取页面的内容。正在进行提取的页面是https,它尝试提取的页面也是https。我在尝试所有设置时收到错误“无法解析主机”。
$c=curl_init();
curl_setopt($c, CURLOPT_URL,$url);
//curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.x.x) Gecko/20041107 Firefox/x.x");
curl_setopt ($c, CURLOPT_RETURNTRANSFER, TRUE);
//curl_setopt($c, CURLOPT_SSL_VERIFYPEER, TRUE);
//curl_setopt($c, CURLOPT_SSL_VERIFYHOST, TRUE);
curl_setopt($c, CURLOPT_HEADER, FALSE);
$html=curl_exec($c);
if($html === false) {
echo curl_error($c);
}
else {
echo 'Operation completed without any errors';
}
curl_close($c);
有什么想法吗?
答案 0 :(得分:50)
我发现CURL可以决定使用IPv6,在这种情况下,它会尝试解析但不会得到IPv6答案(或者那种效果)并超时。
您可以尝试命令行开关-4来测试它。
在PHP中,您可以通过设置此行来配置此行:
curl_setopt($_h, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
答案 1 :(得分:27)
我遇到了同样的问题。 Coudn没有解决google.com问题。 php fpm中有一个错误,我正在使用它。重新启动php-fpm解决了它。
答案 2 :(得分:25)
可能是DNS问题?
针对this code尝试您的网址:
$_h = curl_init();
curl_setopt($_h, CURLOPT_HEADER, 1);
curl_setopt($_h, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($_h, CURLOPT_HTTPGET, 1);
curl_setopt($_h, CURLOPT_URL, 'YOUR_URL' );
curl_setopt($_h, CURLOPT_DNS_USE_GLOBAL_CACHE, false );
curl_setopt($_h, CURLOPT_DNS_CACHE_TIMEOUT, 2 );
var_dump(curl_exec($_h));
var_dump(curl_getinfo($_h));
var_dump(curl_error($_h));
答案 3 :(得分:5)
只是一个可能有用的注释 - 我在我的笔记本电脑上遇到了这个问题(在启动后通过wifi连接),并重新启动服务器(连接后)修复了问题。我想在我的情况下,这可能与apache离线启动有关,也许注意到DNS查找失败了?
答案 4 :(得分:2)
Ubuntu上的glibc中存在一个当前错误,可能会产生这种影响: https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1674733
要解决此问题,请更新libc和所有相关的(要升级的软件包:libc-bin libc-dev-bin libc6 libc6-dev libfreetype6 libfreetype6-dev locales multiarch-support)并重新启动服务器。
答案 5 :(得分:0)
经过以上所有尝试,仍然无法解决我的问题。 但是针对我的问题有了新的解决方案。
在要发出请求的服务器上,应该有一个虚拟主机条目。
sudo vim /etc/hosts
并插入
192.xxx.x.xx www.domain.com
如果您要从服务器向自身发出请求,则是为了解决您的虚拟主机或对其进行标识,服务器需要上面的东西,否则服务器将无法理解您的请求(原始)主机。
答案 6 :(得分:-1)
我们需要将主机安全证书添加到php.ini文件中。对于本地开发环境,我们可以在您的本地php.ini中添加cacert.pem。
做phpinfo();并将你的php.ini路径打开并添加uncomment; curl.capath
curl.capath = path_of_your_cacert.pem
答案 7 :(得分:-1)
添加你的本地主体 恩。 127.0.0.1 cards.localhost 在/ etc / hosts目录中。 现在重启apache服务器
答案 8 :(得分:-1)
如果您在Windows XAMPP / WAMP上执行此操作,则可能无法正常运行。
我解决了设置Laravel Homestead / Vagrant解决方案以创建我的(Ubuntu)开发环境的问题-它具有内置功能:Nginx,PHP 5.6,PHP 7.3,PHP 7.2,PHP 7.1,MySQL,PostgreSQL,Redis,Memcached ,节点...等等。
有关如何设置环境的信息,请参见here-确实值得付出努力!
Laravel Homestead是一个预先包装的官方Vagrant盒子,它为您提供了一个绝佳的开发环境,而无需在本地计算机上安装PHP,Web服务器和任何其他服务器软件。无需担心搞砸操作系统!无业游民的箱子是完全一次性的。如果出现问题,您可以在几分钟内销毁并重新创建盒子!
然后,您可以在几秒钟内轻松切换PHP版本或设置更多虚拟主机,新数据库。
答案 9 :(得分:-2)
您收到错误是因为您可能在本地服务器环境中执行此错误。在进行cURL调用时,您需要跳过证书检查。为此,只需添加以下选项
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0);
答案 10 :(得分:-3)
您可能必须启用HTTPS部分:
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2);
如果您需要验证(自己验证身份),您可能也需要这样做:
curl_setopt($c, CURLOPT_USERPWD, 'username:password');