CURL和HTTPS,“无法解析主机”
我试图使用CURL获取页面的内容。正在执行提取的页面是https,并且它正试图提取的页面也是https。我遇到了所有我尝试设置的错误“无法解析主机”。CURL和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);
任何想法?
也许一个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));
您可能需要启用HTTPS部分:
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2);
如果你需要验证(验证自己的身份),你可能需要这个太:
curl_setopt($c, CURLOPT_USERPWD, 'username:password');
只是一个可以helpful-我有我的笔记本电脑(它通过无线网络启动后连接)这个麻烦与Apache,并重新启动服务器说明(后连接)修复了这个问题。我想在我的情况下,这可能是与apache启动离线,也许有注意到DNS查找失败?
这个线程备份您的要求(如果不是你;))https://bbs.archlinux.org/viewtopic.php?id=78849 – Devaro 2017-03-22 11:31:39
我发现CURL可以决定使用IPv6,在这种情况下,它会尝试解析,但不会得到IPv6答案(或其他问题)并超时。
您可以尝试命令行开关-4来测试。
在PHP中,你可以通过设置这个配置此行:
curl_setopt($_h, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
只是一个供参考。有一个PHP Curl的问题不起作用。服务器上的其他所有内容都正常工作。添加了这些选项并进行修复。奇怪的是,直到最近,一切都很好,没有任何改变。确定无疑的问题,但很高兴这工作! – Valien 2017-03-21 19:53:11
这刚刚开始发生在我身上。浪费了我生命中的5个小时... – 2017-03-22 01:02:25
不知道昨天发生了什么(2017年3月21日),但我们在多台服务器上遇到了运行PHP 7的问题。将此行添加到Curl请求并重新启动PHP-FPM 。 – 2017-03-22 08:39:03
我有同样的问题。 Coudn't解决google.com。在我正在使用的php fpm中存在一个错误。重新启动php-fpm为我解决了它。
由于您可能正在本地服务器环境中执行此操作,因此您会收到此错误。在进行cURL呼叫时,您需要跳过证书检查。为此,只需添加以下选项
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0);
我们需要将主机安全证书添加到php.ini文件。对于本地开发环境,我们可以在您的本地php.ini中添加cacert.pem。
do phpinfo();并提交你的php.ini路径开放,并添加注释去掉; curl.capath
curl.capath = path_of_your_cacert.pem
不幸的是,您的文章涉及不同的问题。我不认为这个解决方案涉及“*无法解析主机*”错误。 – 2017-06-20 00:23:05
有一个在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)并重新启动服务器。
你传递协议,https://开头,作为URL的一部分? – JYelton 2009-08-27 15:03:18
是的 - 尝试str_replace使它http,但没有改变错误。 – swt83 2009-08-27 15:11:10