【问题标题】:cURL not getting HTML source of URLcURL 没有获取 URL 的 HTML 源
【发布时间】:2015-06-25 21:20:22
【问题描述】:

我正在尝试使用 PHP 制作一个简单的网络爬虫,但在获取给定 URL 的 HTML 源代码时遇到问题。我目前正在使用 cURL 来获取源代码。

我的代码:

 $url = "http://www.nytimes.com/";

    function url_get_contents($Url) {
        if (!function_exists('curl_init')) {
            die('CURL is not installed!');
        }
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $Url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $output = curl_exec($ch);
        if ($output === false) { die(curl_error($ch)); }
        curl_close($ch);
        return $output;
    }

    echo url_get_contents($url);
    ?>

现在什么都没有回显,也没有任何错误,所以这有点神秘。任何建议或修复将不胜感激

编辑:我添加了

if ($output === false) { die(curl_error($ch)); }

到函数的中间,它最终给了我一个错误(终于!):

无法解析主机:www.nytimes.com

我仍然不知道问题出在哪里。有什么想法吗?

谢谢

【问题讨论】:

  • 你从来不用检查 curl 是否成功。 if ($output === false) { die(curl_error($ch)); }
  • stackoverflow.com/questions/6516902/… 应该会有所帮助。
  • $Url != $url 也 - 变量区分大小写
  • 可能 nytimes.com 有一些东西可以防止网络爬行。您是否尝试过使用不同的网址?
  • @AlvaroFlañoLarrondo 错误。 curl -i http://www.nytimes.com/ 返回一个 HTTP/1.1 200 响应。

标签: php curl web-crawler


【解决方案1】:

原来不是cURL问题

我的主机服务器 (Ubuntu VM) 使用“仅限主机”的网络适配器工作,该适配器阻止了对其主机之外的所有其他 IP 或域的访问,从而使 cURL 无法连接到 URL。

一旦将其更改为“桥接”网络适配器,我就可以访问外部世界了。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    变量大小写不匹配($url$Url)。变化:

    function url_get_contents($Url) {
    

    function url_get_contents($url) {
    

    【讨论】:

    • 这两个变量在函数内部和外部的不同上下文中使用。加上编辑后的问题显示该网址已正确读取。
    • @AlvaroFlañoLarrondo 这个答案是在问题编辑之前发布的,当时变量名称在函数中没有对齐。我敏锐地意识到在两种不同的上下文中有 2 个变量。
    猜你喜欢
    • 1970-01-01
    • 2015-02-01
    • 2011-04-05
    • 2014-12-19
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    相关资源
    最近更新 更多