在 PHP 中下载 URL 的内容,即使它返回 404

2022-08-30 22:32:44

我想使用PHP下载URL的内容,即使HTTP响应代码是404。 会出错,我无法使用Google找到答案。我该怎么做?file_get_contents


答案 1

您必须将流包装器配置为忽略错误:

ignore_errors 即使在失败状态代码上获取内容。默认值为booleanFALSE

换句话说,做

echo file_get_contents(
    'http://stackoverflow.com/foo/bar',
    false,
    stream_context_create([
        'http' => [
            'ignore_errors' => true,
        ],
    ])
);

你会得到404页面。

如果希望这是 HTTP 流的默认行为,请使用

stream_context_set_default(
    array('http' => array(
        'ignore_errors' => true)
    )
);

任何使用HTTP流包装器的调用都将使用这些设置,例如,您可以简单地执行

echo file_get_contents('http://stackoverflow.com/foo/bar');

如果您还想获取响应标头,只需执行

print_r($http_response_header);

通话后。该变量在每次调用后使用 http 流包装器(重新)填充。


答案 2

默认情况下,file_get_contents仅返回 HTTP 200 响应的内容。

使用 curl,您可以分别获得标题和内容。

从 PHP 5.0 开始,您还可以为 指定上下文,从而允许您在不依赖 url 的情况下执行此操作(请参阅 Gordon 的答案)。file_get_contents


推荐