【问题标题】:php: Get html source code with cURLphp: 使用 cURL 获取 html 源代码
【发布时间】:2011-04-05 06:29:45
【问题描述】:

不使用file_get_contents()如何获取http://www.example-webpage.com/file.html的html源代码?

我需要知道这一点,因为在某些网络主机上allow_url_fopen 被禁用,因此您无法使用file_get_contents()。是否可以使用 cURL 获取 html 文件的源代码(如果启用了 cURL 支持)?如果是这样,怎么做? 谢谢。

【问题讨论】:

    标签: php html curl


    【解决方案1】:

    尝试以下方法:

    $ch = curl_init("http://www.example-webpage.com/file.html");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
    $content = curl_exec($ch);
    curl_close($ch);
    

    我只推荐这个用于小文件。大文件是整体读取的,很可能会产生内存错误。


    编辑: 在 cmets 中进行了一些讨论后,我们发现问题在于服务器无法解析主机名,并且该页面是另外一个 HTTPS 资源,所以这是您的临时解决方案(直到您的服务器管理员修复名称解析)。

    我所做的只是 ping graph.facebook.com 以查看 IP 地址,将主机名替换为 IP 地址,而是手动指定标头。然而,这会使 SSL 证书无效,因此我们必须禁止对等验证。

    //$url = "https://graph.facebook.com/19165649929?fields=name";
    $url = "https://66.220.146.224/19165649929?fields=name";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: graph.facebook.com'));
    $output = curl_exec($ch);
    curl_close($ch); 
    

    请记住,IP 地址可能会更改,这是一个错误来源。您还应该使用curl_error(); 进行一些错误处理。

    【讨论】:

    • 约翰,如果这不起作用,请检查您的网址。另外,不要忘记最后的 curl_close($ch)。
    • 它是否适用于纯文本文件而不是 html 文件?我用纯文本文件对其进行了测试 - 我得到了一个空白页。
    • 你正确关闭 curl 不是一个坏主意,我会用文本文件调查用例。也许你有我的网址(因为几乎没有区别,但可能还有另一个错误......)?
    • 好的下载facebook.com/robots.txt 工作正常,你能把不工作的网址给我吗?
    • 不要放弃,我修改了答案并为您发布了一个临时解决方案!
    【解决方案2】:
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($curl);
    curl_close($curl);
    

    来源:http://www.christianschenk.org/blog/php-curl-allow-url-fopen/

    【讨论】:

      【解决方案3】:

      试试http://php.net/manual/en/curl.examples-basic.php :)

      <?php
      
      $ch = curl_init("http://www.example.com/");
      $fp = fopen("example_homepage.txt", "w");
      
      curl_setopt($ch, CURLOPT_FILE, $fp);
      curl_setopt($ch, CURLOPT_HEADER, 0);
      
      $output = curl_exec($ch);
      curl_close($ch);
      fclose($fp);
      ?>
      

      正如文档所说:

      cURL 函数背后的基本思想是您使用 curl_init() 初始化一个 cURL 会话,然后您可以通过 curl_setopt() 设置传输的所有选项,然后您可以执行使用 curl_exec() 进行会话,然后您使用 curl_close() 结束会话

      【讨论】:

        【解决方案4】:

        我在 Github 中找到了一个工具,它可能是这个问题的解决方案。 https://incarnate.github.io/curl-to-php/ 希望对你有用

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-31
          • 1970-01-01
          • 2012-10-18
          • 2022-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-21
          相关资源
          最近更新 更多