php实现系统所有api集合在线调试工具代码
代码语言:php
所属分类:其他
代码描述:php实现系统所有api集合在线调试工具代码
代码标签: php 系统 所有 api 集合 在线 调试 工具 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<?php // api_tester.php $target_url ="https://example.com/v1";//修改基础url地址 // --- START: API Proxy Logic --- // 如果请求中包含 'proxy' 参数,则作为API代理执行 if (isset($_GET['proxy'])) { // 开启 session,以便转发 cookie session_start(); // --- 自动检测API前缀 --- // 这个前缀是真实API服务器的地址 $scheme = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http"; $host = $_SERVER['HTTP_HOST']; $path = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); $api_prefix = "{$scheme}://{$host}{$path}/"; // 获取前端传来的API路径和方法 $api_path = $_GET['path'] ?? ''; $api_method = $_GET['method'] ?? 'GET'; //$target_url = $api_prefix . $api_path; // 获取前端发来的请求体 $request_body = file_get_contents('php://input'); // 初始化 cURL $ch = curl_init(); // 设置 cURL 选项 curl_setopt($ch, CURLOPT_URL, $target_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回响应体,而不是直接输出 curl_setopt($ch, CURLOPT_HEADER, true); // 返回响应头 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $api_method); // 设置请求方法 // 如果是 POST 或 PUT, 添加请求体和 Content-Type 头 if (in_array($api_method, ['POST', 'PUT']) && !empty($request_body)) { curl_setopt($ch, CURLOPT_POSTFIELDS, $request_body); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Content-Length: ' . strlen($request_body) ]); } // *** 关键:转发浏览器的 session cookie *** // 这使得API能够识别用户的登录状态 if (isset($_COOKIE[session_name()])) { curl_setopt($ch, CURLOPT_COOKIE, session_name() . '=' . $_COOKIE[session_name()]); } // 执行 cURL 请求 $response = curl_exec($ch); $error = curl_error($ch); // 如果 cURL 出错,返回错误信息 if ($error) { header('Content-Type: application/json'); http_response_code(500); // 代理服务器本身错误 echo json_encode(['error' => 'Proxy cURL Error: ' . $error]); curl_close($ch); exit; } // 分离响应头和响应体 $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $header_str = substr($response, 0, $header_size); $body_str = substr($response, $header_size); // 获取真实API的HTTP状态码 $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); // 关闭 cURL curl_close($ch); // *** 关键:将API服务器设置的cookie(如Set-Cookie)转发回浏览器 *** $headers = explode("\r\n", $header_str); foreach ($headers as $header) { // 只转发 Set-Cookie 和 Content-Type 头 if (stripos($header, 'Set-Cookie:') === 0 || stripos($header, 'Content-Type:') === 0) { header($header, false); } } // 构造返回给前端的JSON $response_for_frontend = [ 'status' => $status_code, 'body' => json_decode($body_str, true) ?? $body_str, // 尝试解码JSON,失败则返回原始字符串 'headers' => $headers ]; // 代理本身总是返回 200 OK,实际状态码在JSON负载中 http_response_code(200); if(strpos(strtolower(implode("\n", $headers)), 'content-type: application/json') === false) { header('Content-Type: application/json'); } echo json_encode($response_for_frontend); // 代理任务完成,退出脚本,不渲染下面的HTML exit; } // --- END: API Proxy Logic --- // --- API 定义 --- // 在这里定义所有需要测试的API接口 // 'auth' => 'none' (无需登录), 'user' (需用户登录), 'technician' (需技师登录), 'admin' (需管理员登录) $api_list = [ '身份认证' => [ ['name' => '用户注册', 'method' => 'POST', 'url' => 'api/auth/register', 'auth' => 'none', 'body' => '{"username": "newuser", "email": "newuser@example.com", "password": "password"}'], ['name' => '用户登录', 'method' => 'POST', 'url' => 'api/auth/login', 'auth' => 'none', 'body' => '{"email": "user@example.com", "password": "password"}'], ['name' => '检查用户登录状态', 'method' => 'GET', 'url' => 'api/auth/check', 'auth' => 'none', 'body' => ''], ['name' => '技师注册', 'method' => 'POST', 'url' => 'api/auth/technician/register', 'auth' => 'none', 'body' => '{"username": "newtech", "email": "newtech@example.com", "password": "password", "real_name": "王师傅"}'], ['name' => '技师登录', 'method' => 'POST', 'url' => 'api/auth/technician/login', 'auth' => 'none', 'body' => '{"email": "tech01@example.com", "password": "password"}'], ['name' => '检查技师登录状态', 'method' => 'GET', 'url' => 'api/auth/technician/check', 'auth' => 'none', 'body' => ''], ['name' => '管理员登录', 'method' => 'POST', 'url' => 'api/auth/admin/login', 'auth' => 'none', 'body' => '{"username": "admin", "password": "password"}'], ['name' => '检查管理员登录状态', 'method' => 'GET', 'url' => 'api/auth/admin/check', 'auth' => 'none', 'body' => ''], ['name' => '用户/技师/管理员登出', 'method' => 'POST', 'url' => 'api/auth/logout', 'auth'.........完整代码请登录后点击上方下载按钮下载查看
网友评论0