Php Curl不能仅在一个网站上运行

时间:2018-07-06 15:34:45

标签: php curl

我有一个非常非常奇怪的错误。 我需要使用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,域和子域,在我的服务器上和外部)!

我已经花了一天的时间来解决这个问题,请帮助我!

谢谢你,卢卡

1 个答案:

答案 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:标头还是很容易的)