【问题标题】:How to use PHP curl to fetch www.yahoo.com page?如何使用 PHP curl 获取 www.yahoo.com 页面?
【发布时间】:2014-04-01 05:46:30
【问题描述】:

尝试写一个简单的爬虫方法。当我使用 PHP curl 获取 www.yahoo.com 页面时,我什么也没得到。如何获取页面? 我的代码如下。

public function getWebPage($url, $timeout = 120) {
    $options = array(
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HEADER         => false,
            CURLOPT_FOLLOWLOCATION => true, 
            CURLOPT_ENCODING       => "",       
            CURLOPT_USERAGENT      => "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.19) Gecko/20081216 Ubuntu/8.04 (hardy) Firefox/2.0.0.19",
            CURLOPT_AUTOREFERER    => true, 
            CURLOPT_CONNECTTIMEOUT => $timeout,
            CURLOPT_TIMEOUT        => $timeout,
            CURLOPT_MAXREDIRS      => 10,
    );

    $ch      = curl_init($url);
    curl_setopt_array($ch, $options);
    $content = curl_exec($ch);
    $err     = curl_errno($ch);
    $errmsg  = curl_error($ch);
    $header  = curl_getinfo($ch);
    curl_close($ch);

    return $content;
}

【问题讨论】:

标签: php curl web-crawler


【解决方案1】:

yahoo.com 在安全套接字层上运行。因此,将此 cURL 参数添加到您现有的集合中。

CURLOPT_SSL_VERIFYPEER     => false,

同时禁用USERAGENT..

工作代码..(已测试)

<?php

class A
{
    public function getWebPage($url, $timeout = 120) {
        $options = array(
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HEADER         => false,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_ENCODING       => "",
            //CURLOPT_USERAGENT      => "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.19) Gecko/20081216 Ubuntu/8.04 (hardy) Firefox/2.0.0.19",
            CURLOPT_AUTOREFERER    => true,
            CURLOPT_CONNECTTIMEOUT => $timeout,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_TIMEOUT        => $timeout,
            CURLOPT_MAXREDIRS      => 10,
        );

        $ch      = curl_init($url);
        curl_setopt_array($ch, $options);
        $content = curl_exec($ch);
        $err     = curl_errno($ch);
        $errmsg  = curl_error($ch);
        $header  = curl_getinfo($ch);
        curl_close($ch);

        return $content;
    }
}

$a = new A;
echo $a->getWebPage('www.yahoo.com');

【讨论】:

  • 与其禁用 SSL 验证,不如弄清楚它失败的原因(如果这确实是问题所在)并修复它。唯一的原因可能是缺少根证书,该证书很容易找回。
  • 只是一个问题。我认为有些网站会检查有效的用户代理,我们可以在常见用例中禁用它吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
  • 2014-05-15
  • 1970-01-01
相关资源
最近更新 更多