处理未找到的Http请求

时间:2017-07-14 15:44:16

标签: php exception-handling

我正在创建一个服务,并且在这个服务中我从api获取一些数据,它工作正常,但现在我需要处理一些http请求,其中一个是404,因为有时我试图检索的数据是没找到。

我服务的方法是:

public function getAllGamesFromDate($date = "2017-08-09", $tournament = "123")
    {

        $api = file_get_contents($this->url."schedules/".$date."/schedule.json?api_key=".$this->api_key);

        $result = collect(json_decode($api, true))->toArray();

        $data = [];



        foreach ($result['events'] as $event){
            if($event['id'] == $tournament){
                array_push($data,$event);
            }
        }

        return response($data);
    }

如果没有数据,由于我没有处理错误,我收到此错误:

ErrorException in MyService.php line 32:
file_get_contents(https://api.url...): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found

处理此类错误的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

在帮助程序中创建此函数:

function get_http_response_code($url) {
    $headers = get_headers($url);
    return substr($headers[0], 9, 3);
}

并检查get_http_response_code($this->url."schedules/".$date."/schedule.json?api_key=".$this->api_key)!= 200

答案 1 :(得分:-1)

你不能简单地在file_get_contents周围使用try / catch块吗?

try {
    $api = file_get_contents($this->url."schedules/".$date."/schedule.json?api_key=".$this->api_key);
{ catch (Exception $e) {
    echo $e->getMessage();
}

你也可以通过在调用file_get_contents()之前加一个@来抑制警告:$ api = @file_get_contents