【问题标题】:file_get_contents() or cURL to handle 40* and 50* errors and 200 reponse codefile_get_contents() 与 cURL 处理 40* 和 50* 错误以及 200 响应代码
【发布时间】:2018-03-18 19:01:45
【问题描述】:

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

  • 200 => 获取文件
  • 403 => 打印“错误”
  • 502 => 打印“错误网关”
  • ...

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

【问题讨论】:

    标签: php curl file-get-contents


    【解决方案1】:

    如何获取 HTTP 响应的状态?

    使用cURL

    函数curl_getinfo() 获取有关特定传输的信息。此函数的第二个参数允许获取特定信息。常量CURLINFO_HTTP_CODE 可用于获取HTTP 响应的HTTP 状态码。
    curl_getinfo() 应在curl_exec() 之后调用,如果curl_exec()' 返回不为false,则相关。如果响应是false,在这种情况下不要忘记使用curl_error() 来获取可读的错误字符串。

    $url = 'https://stackoverflow.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()从流/文件指针中检索头/元数据

    $url = 'https://stackoverflow.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)
    

    【讨论】:

    • 非常感谢!每次执行请求时我都必须 setopt 吗?
    • @AxelCarré 也就是说,curl_init() 初始化了一个 cURL 会话。因此,似乎在您不关闭此会话之前,该选项已被定义(或者直到 PHP 脚本结束,当然)。
    猜你喜欢
    • 1970-01-01
    • 2013-09-08
    • 2019-04-02
    • 2020-08-31
    • 2012-01-02
    • 1970-01-01
    • 2017-05-27
    • 2019-02-01
    相关资源
    最近更新 更多