我有一个非常非常奇怪的错误。 我需要使用cURL访问该网站:http://sub.example.com/。从本地主机,我也没有问题,也可以从命令行或浏览器使用cURL来访问网站。
我正在我的Siteground服务器上使用以下代码:
<?php
$url="http://sub.example.com/";
$agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_URL,$url);
$result=curl_exec($ch);
var_dump($result);
?>
我得到 $ result = false 。
如果我使用“尝试/捕获”,则会得到:卷曲失败,并显示错误#6:无法解析主机
我还尝试用$ url替换另一个网站的url,它始终有效(http和https,域和子域,在我的服务器上和外部)!
我已经花了一天的时间来解决这个问题,请帮助我!
谢谢你,卢卡
答案 0 :(得分:0)
根据googledns,sub.example.com
不存在。
$ nslookup sub.example.com 8.8.8.8
*** google-public-dns-a.google.com can't find sub.example.com: Non-existent domain
Server: google-public-dns-a.google.com
Address: 8.8.8.8
在localhost上为您工作的事实意味着您有一个奇怪的DNS,或者在hosts file中有一个对应的DNS条目,而Siteground服务器却没有。
无论如何,Curl failed with error #6: Could not resolve host
意味着服务器的dns找不到sub.example.com
,但是幸运的是,如果您知道要连接的IP,则可以通过写以下内容完全绕过DNS:>
curl_setopt($ch, CURLOPT_URL,'http://93.184.216.34/');
curl_setopt($ch,CURLOPT_HTTPHEADER,array('Host: sub.example.com'));
(还有一个更正确的curl可以告诉curl哪个IP与wich域一起使用,但是此名称此刻使我不知所措,而iirc,php尚未为其添加官方支持,因此您可以为其使用魔术值,而不是使用已定义的名称,但是手动设置Host:
标头还是很容易的)