php: 使用 cURL 获取 html 源代码

Posted

技术标签:

【中文标题】php: 使用 cURL 获取 html 源代码【英文标题】:php: Get html source code with cURL 【发布时间】: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 支持)?如果是这样,怎么做? 谢谢。

【问题讨论】:

【参考方案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/ 希望对你有用

【讨论】:

以上是关于php: 使用 cURL 获取 html 源代码的主要内容,如果未能解决你的问题,请参考以下文章

PHP读取受保护页面的HTML源[重复]

获取 iframe 源?

工作中总结的常用PHP代码

PHP如何支持CURL字符串证书传输 ?

php curl数据传输神器

php curl数据传输神器