PHP 请求api时,利用curl接收,返回数组

也不是什么大不了的代码,以前用file_get_content,感受总体上感觉效率不太好,我记得以前也发过类似的文章,搞忘了,现在重新记录一下。

使用cURL库发送HTTP请求,并设置了一些选项:

  • CURLOPT_URL: 设置请求的URL。
  • CURLOPT_TIMEOUT: 设置请求的超时时间,单位为秒。
  • CURLOPT_RETURNTRANSFER: 将返回的结果以字符串的形式返回,而不是直接输出。

函数接受两个参数:

  • $durl: 请求的URL。
  • $cache: 缓存时间,以秒为单位,默认为0,表示不缓存。(暂未完善,因为使用了静态网页)

函数通过cURL发送请求,并将返回的结果以字符串的形式保存在变量$r中。然后使用curl_close()关闭cURL会话,并使用json_decode()将返回的JSON格式数据解码为关联数组。最后返回该数组。

PHP代码

public function get_api($durl,$cache = 0)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $durl);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $r = curl_exec($ch);
        curl_close($ch);
        return json_decode($r,true);
    }

升级优化

function get_api($durl, $cache = 0)
{
    // 初始化cURL会话
    $ch = curl_init();

    // 设置cURL选项
    curl_setopt($ch, CURLOPT_URL, $durl);          // 设置请求的URL
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);          // 设置超时时间为5秒
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   // 将结果通过变量返回,而不是直接输出

    // 获取Referer的主机部分
    $referer_host = parse_url($durl, PHP_URL_SCHEME) . '://' . parse_url($durl, PHP_URL_HOST);
    curl_setopt($ch, CURLOPT_REFERER, $referer_host);  // 设置Referer头,指定来源主机部分

    // 模拟浏览器访问的相关选项
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.9999.999 Safari/537.36');  // 设置User-Agent头,模拟浏览器
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Accept: application/json',
    'Content-Type: application/json; charset=utf-8'
    ));
    
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

    // 执行请求并获取响应结果
    $r = curl_exec($ch);

    // 关闭cURL会话
    curl_close($ch);

    // 解析JSON格式的响应结果,并返回解析后的数组
    return json_decode($r, true);
}

 

© 版权声明
THE END
喜欢就支持一下吧
点赞11
评论 抢沙发

请登录后发表评论

    暂无评论内容