file_get_contents() 或 cURL 来处理 40* 和 50* 错误以及 200 响应代码

file_get_contents() or cURL to handle 40* and 50* errors and 200 reponse code

我使用 file_get_contents() 启动了我的 PHP 脚本,我使用的是在线数据库,我可以使用 URL 从中获取 JSON,但有时 (我忍不住)我得到了一些 40* 或 50* 错误响应代码,我想知道你们是否可以告诉我在 cURL 和 file_get_contents 之间使用什么更好,因为基本上每次我都必须检查响应代码并切换大小写以确定下一步要做什么。

希望我说清楚了,提前致谢!

如何获取 HTTP 响应的状态?

使用cURL

函数 curl_getinfo() get information regarding a specific transfer. The second parameter of this function allows to get a specific information. The constant CURLINFO_HTTP_CODE can be used to get the HTTP status code of the HTTP response.
curl_getinfo() should be called after curl_exec() and is relevant if curl_exec()' return is not false. If the response is false, don't forget to use curl_error() 在这种情况下获取错误的可读字符串。

$url = 'https://whosebug.com';
$curlHandle = curl_init($url);
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true); // required to get the HTTP header
$response = curl_exec($curlHandle);
$httpCode = $response !== false ? curl_getinfo($curlHandle, CURLINFO_HTTP_CODE) : 0;
curl_close($curlHandle);
var_dump($httpCode); // int(200)

使用streams

函数 stream_get_meta_data() 从 streams/file 指针中检索 header/meta 数据

$url = 'https://whosebug.com';
$httpCode = 0;
if ($fp = fopen($url, 'r')) {
    $data = stream_get_meta_data($fp);
    [$proto, $httpCode, $msg] = explode(' ', $data['wrapper_data'][0] ?? '- 0 -');
}
fclose($fp);
var_dump($httpCode); // int(200)