TP5.1 简单利用CURL实现请求
首先封装一个 CURL 方法,可以不用理解代码
class MyCurl extends Base { /** * http请求 * * @param $url //请求地址 * @param $params //链接后拼接的参数数组 * @param $method //get/post * @param $header //请求头数组 */ function httpCurl($url, $params, $method = 'GET', $header = array(), $multi = false) { date_default_timezone_set('PRC'); //设置默认时区 $opts = array( //请求参数 CURLOPT_TIMEOUT => 30, CURLOPT_RETURNTRANSFER => 1, //将curl_exec()获取的信息以文件流的形式返回 CURLOPT_SSL_VERIFYPEER => false, //不对认证证书来源的检查 CURLOPT_SSL_VERIFYHOST => false, //不从证书中检查SSL加密算法是否存在 CURLOPT_HTTPHEADER => $header, //Content-Type类型 CURLOPT_COOKIESESSION => true, CURLOPT_FOLLOWLOCATION => 1, // 使用自动跳转 CURLOPT_COOKIE => session_name() . '=' . session_id(), ); /* 根据请求类型设置特定参数 */ switch (strtoupper($method)) { case 'GET': // 链接后拼接参数 如xxx.com?key = value & key2=value $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);//将数组变成key=value&key2=value break; case 'POST': //判断是否传输文件 $params = $multi ? $params : http_build_query($params); //同上 $opts[CURLOPT_URL] = $url; $opts[CURLOPT_POST] = 1; $opts[CURLOPT_POSTFIELDS] = $params; break; default: throw new Exception('不支持的请求方式!'); } /* 初始化并执行curl请求 */ $ch = curl_init(); curl_setopt_array($ch, $opts); // 数组形式设置URL和其他参数 $data = curl_exec($ch); // URL抓取并把它传递给浏览器 $error = curl_error($ch); curl_close($ch); if ($error) return $this->create('','错误信息:'.$error,400); $data = json_decode($data, true); return $data; } /** * xml/json数据的POST请求 * * @param $url //请求地址 * @param $xmlData //xml 或 json数据 */ public function PostData($url,$xmlData) { $curl = curl_init(); $param[CURLOPT_URL] = $url; $param[CURLOPT_HEADER] = false; $param[CURLOPT_RETURNTRANSFER] = true; $param[CURLOPT_FOLLOWLOCATION] = true; $param[CURLOPT_POST] = true; $param[CURLOPT_POSTFIELDS] = $xmlData; $param[CURLOPT_SSL_VERIFYPEER] = false; $param[CURLOPT_SSL_VERIFYHOST] = false; curl_setopt_array($curl,$param); //传参数 $data = curl_exec($curl); //执行命令 curl_close($curl); return $data; } }
测试 微信小程序通过code 获取 openId 的过程
public function test(Request $request) { $url = App::config('xcxKey_url'); //请求地址 //从微信服务器换取 openid 传递的参数 AppId、AppSecret、Code、grant_type、connect_redirect $params['appid'] = App::config('xcx_appid'); $params['secret'] = App::config('xcx_secret'); $params['js_code'] = $request::param('code'); $params['grant_type'] = 'authorization_code'; $params['connect_redirect'] = 1; return (new MyCurl)->httpCurl($url, $params, 'POST'); }
结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通