curl里面的坑

  如果在使用粗crul library来进行远程请求(API调用)的时候要注意的一个坑。就是要区别请求成功,请求失败,请求成功但返回为空。这里要特别注意后2者,稍不注意就会掉坑。因为如果请求的url不存在或者连接超时(各种原因)的时候返回结果为false.所以不要简单的认为返回的数据为空。可以用$result === false为真来判断请求失败。因为一般的API不会返回boolean值的。引申一下,如果你是在制作一个API也请不要随意的返回一个空数据为false.这样会很难区分到底是数据为空还是请求失败。就比如:

protected function send($parameters = array())
    {
        $apiUrl = "xxxxx";

        if ($parameters) {
            $apiUrl .= ‘&‘ . http_build_query($parameters);
        }

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $apiUrl);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, ‘GET‘);
        curl_setopt($ch, CURLOPT_HEADER, 0);

        $result = curl_exec($ch);
        $curlErrno = curl_errno($ch);
        $curlError = curl_error($ch);
        curl_close($ch);
        
        if ($result && $curlErrno <= 0) {
            return json_decode($result, true);
        } else {
            exit("Error: " . $curlError . "\n");
        }
    }
View Code

或者这样也可以

1 if ($result === false) {
2     //请求失败
3 } else {
4     //请求成功
5 }
View Code

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。