CURL和HTTPS,"无法解析主机"

swt*_*t83 38 php curl

我正在尝试使用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);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Sta*_*rer 52

我发现CURL可以决定使用IPv6,在这种情况下它会尝试解析但不会得到IPv6答案(或者那种效果)并超时.

您可以尝试命令行开关-4来测试它.

在PHP中,您可以通过设置以下内容来配置此行:

curl_setopt($_h, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
Run Code Online (Sandbox Code Playgroud)

  • Ubuntu错误是[修复](https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/1674532).使用`cat/var/log/apt/history.log`检查apt日志以查看它是否已更新.如果不是,你可能需要运行`apt-get update`和`apt-get upgrade`.重启PHP-FPM将在修复后完成. (8认同)
  • 只是一个FYI.有一个PHP Curl的问题不起作用.服务器上的其他所有工作正常.添加了这些选项并修复了它.奇怪的是,直到最近,一切都工作正常,没有任何变化.晦涩难懂的问题,但很高兴这很有用! (3认同)
  • 不确定昨天发生了什么(2017年3月21日),但我们在多台服务器上遇到了运行PHP 7的问题.将此行添加到Curl请求并重新启动PHP-FPM后问题得以解决. (3认同)
  • 昨天(3月21日)我们还发现服务器停止使用DNS查找卷曲,真的很奇怪.重新启动php5.6-fpm然后在一天后(今天)再次失败,将ipv4 dns选项放入并测试它何时再次失败. (3认同)
  • 这对我来说也刚刚开始发生。浪费了我生命中的五个小时...... (2认同)

Tec*_*ast 29

我有同样的问题.Coud不解决google.com.php fpm中有一个错误,我正在使用它.重新启动php-fpm为我解决了这个问题.

  • 这也发生在我身上.CLI上的主机名已解决,但在重新启动PHP-FPM之前,PHP-FPM无法解析ElasticSearch集群的主机名.非常烦人,因为我不知道如何防止它,我们即将把这台服务器投入生产. (4认同)
  • 重新启动`php7.0-fpm`(因为我在php7.0上)也解决了它. (3认同)
  • 我看到了同样的问题 (2认同)
  • 在php5-fpm(5.5.9)上看到相同的重启修复它,但过了一段时间它又回来了 (2认同)

KB2*_*B22 27

也许是DNS问题?

针对此代码尝试使用您的网址:

$_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)); 
Run Code Online (Sandbox Code Playgroud)

  • 你救了我的一天.我发现了我的问题.它将'http://'附加到我的网址,使其无效. (10认同)
  • 我的系统管理员修复了DNS问题,谢谢. (7认同)
  • @KB22您能详细解释一下您的代码吗? (3认同)

小智 5

只是一个可能有用的注意事项 - 我在我的笔记本电脑上遇到了这个问题(在启动后通过wifi连接),并重新启动服务器(连接后)修复了问题.我想在我的情况下,这可能与apache离线启动有关,也许注意到DNS查找失败了?