如何在不使用http://www.example-webpage.com/file.html
的情况下获取file_get_contents()
的html源代码?
我需要知道这一点,因为在某些webhost allow_url_fopen
被禁用,因此您无法使用file_get_contents()
。是否可以使用cURL获取html文件的源代码(如果启用了cURL支持)?如果是这样,怎么样?
感谢。
答案 0 :(得分:33)
尝试以下方法:
$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);
我只推荐小文件。大文件作为一个整体读取,可能会产生内存错误。
编辑:经过评论中的一些讨论后,我们发现问题是服务器无法解析主机名,而且该页面还有一个https资源,所以这里是你的临时解决方案(直到你的serveradmin修复名称解析)。
我所做的只是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();
做一些错误处理答案 1 :(得分:3)
$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/
答案 2 :(得分: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()完成会话。
答案 3 :(得分:0)
我在Github中找到了一个可能解决这个问题的工具。 https://incarnate.github.io/curl-to-php/ 我希望这将有用