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 源代码的主要内容,如果未能解决你的问题,请参考以下文章