php实现支持亮色暗色类似postman的api调试工具代码
代码语言:php
所属分类:其他
代码描述:php实现支持亮色暗色类似postman的api调试工具代码
代码标签: php 亮色 暗色 类似 postman api 调试 工具 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<?php // api_tester.php // A Postman-like API testing tool in a single PHP file. // Compatible with PHP 5.6+ and modern browsers. // --- START: API Proxy Logic --- // When the page is POSTed to with a `?proxy=1` query string, it acts as a proxy. if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_GET['proxy'])) { // The proxy always returns JSON. header('Content-Type: application/json'); // Get the request details from the Vue app's POST body. $raw_input = file_get_contents('php://input'); $request_data = json_decode($raw_input, true); if (json_last_error() !== JSON_ERROR_NONE) { http_response_code(400); echo json_encode(array('error' => 'Proxy Error: Invalid JSON sent from client.')); exit; } // Extract details for the cURL request. $method = isset($request_data['method']) ? strtoupper($request_data['method']) : 'GET'; $url = isset($request_data['url']) ? $request_data['url'] : ''; $body_data = isset($request_data['body']) ? $request_data['body'] : null; $headers_from_client = isset($request_data['headers']) && is_array($request_data['headers']) ? $request_data['headers'] : array(); if (empty($url)) { http_response_code(400); echo json_encode(array('error' => 'Proxy Error: Request URL is missing.')); exit; } // Initialize cURL. $ch = curl_init(); // Convert the client's header array to the format cURL expects. $curl_headers = array(); foreach ($headers_from_client as $header) { if (!empty($header['key'])) { $curl_headers[] = $header['key'] . ': ' . $header['value']; } } // Set cURL options. curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Return response as a string. curl_setopt($ch, CURLOPT_HEADER, true); // Include headers in the response. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 30-second timeout. // In development, you might need to bypass SSL verification for local servers. // Use with caution in production. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // Handle request body for POST, PUT, PATCH. if (!is_null($body_data) && in_array($method, array('POST', 'PUT', 'PATCH'))) { $json_body = json_encode($body_data); curl_setopt($ch, CURLOPT_POSTFIELDS, $json_body); // Add Content-Type header for JSON, but don't override if the user set it manually. $has_content_type = false; foreach($curl_headers as $h) { if (stripos($h, 'Content-Type:') === 0) { $has_content_type = true; break; } } if (!$has_content_type) { $curl_headers[] = 'Content-Type: application/json'; } $curl_headers[] = 'Content-Length: ' . strlen($json_body); } if (!empty($curl_headers)) { curl_setopt($ch, CURLOPT_HTTPHEADER, $curl_headers); } // Execute the request and measure time. $start_time = microtime(true); $response_raw = curl_exec($ch); $end_time = microtime(true); $request_time = round(($end_time - $start_time) * 1000); // Time in milliseconds. $curl_error = curl_error($ch); if ($curl_error) { http_response_code(502); // Bad Gateway, indicates a proxy-level failure. echo json_encode(array('error' => 'cURL Error: ' . $curl_error)); curl_close($ch); exit; } // Separate response headers from the body. $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $response_headers_raw = substr($response_raw, 0, $header_size); $response_body_raw = substr($response_raw, $header_size); $response_size = strlen($response_bod.........完整代码请登录后点击上方下载按钮下载查看
网友评论0