📜  从 url 下载 html 内容 php (1)

📅  最后修改于: 2023-12-03 15:21:54.270000             🧑  作者: Mango

从 URL 下载 HTML 内容 PHP

在 PHP 中,我们可以使用多种方式来从 URL 中下载 HTML 内容,例如:

  • file_get_contents()
  • cURL

下面将介绍这两种方式的用法以及优缺点。

file_get_contents()

file_get_contents() 函数可以读取一个文件的内容或者一个 URL 地址的内容,例如:

$url = 'http://example.com';
$html = file_get_contents($url);
echo $html;

该代码将会输出 http://example.com 这个网站的 HTML 内容。需要注意的是,如果使用该函数下载 https:// 开头的 URL 地址的内容,会产生一个类似于下面的警告:

file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

这是因为 cURL 扩展默认情况下不会验证 SSL 证书,如果要解决该问题,可以传递一个参数 stream_context_create() 给函数,如下所示:

$url = 'https://example.com';
$options = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false
    )
);
$context = stream_context_create($options);
$html = file_get_contents($url, false, $context);
echo $html;
cURL

cURL 是一个强大的 PHP 扩展,专门用于从 URL 下载内容。使用 cURL 可以实现更精细的 HTTP 请求和响应控制,例如:

  • 设置代理
  • 设置请求头
  • 设置 Cookie
  • 模拟登录
  • 下载大文件
  • 处理 HTTP 错误

以下是一个使用 cURL 下载 URL 内容的示例:

$url = 'http://example.com';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($curl);
curl_close($curl);
echo $html;

该代码将会输出 http://example.com 这个网站的 HTML 内容。需要注意的是,如果使用该函数下载 https:// 开头的 URL 地址的内容,需要设置一个额外的选项 CURLOPT_SSL_VERIFYPEER,如下所示:

$url = 'https://example.com';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$html = curl_exec($curl);
curl_close($curl);
echo $html;
总结

无论是使用 file_get_contents() 还是 cURL,都可以方便地从 URL 下载 HTML 内容。如果只需要简单地下载内容,使用 file_get_contents() 即可;如果需要更加精细的 HTTP 请求和响应控制,则应该使用 cURL。