文档中心

基于OpenAPI规范的标准化技术文档枢纽,提供版本化、交互式、机器可读的API全生命周期管理解决方案。

星座运势查询

服务正常 按量计费专属会员免费 趣味 2025-10-26 15 次

提供星座运势查询服务,支持查询十二星座今日或明日、本周、本月、本年的运势。

调用权限
正常
请求频率限制
30次/秒 (30 QPS)
免费额度
200
参考价格
专属会员免费

计费优先级(按已开通的计费类型依次校验):

专属会员->单独包月->次数包->点数计费->账户余额->免费额度

按量计费:

该产品支持点数余额抵扣,每次扣除点数:1 点/次 约 0.0001 元/次

专属会员:

专属会员有效期内,可免费使用本产品。

免费额度:

总免费额度 每月免费额度 每日免费额度
200 (次) 200 (次) 包含在总免费额度 200 (次) 包含在总免费额度

请求限制:

免费/测试用户请求频率限制 请求频率总限制 专属会员请求频率限制 每日请求次数总限制
1秒10次 每个免费用户的QPS总限制 1秒30次 每个用户QPS总限制 1秒30次 每个专属会员用户的QPS总限制 不限 每个用户每日请求总次数

其他准入要求:

  • 账户余额/点数计费的用户,不限制每日请求次数和QPS
  • 接口地址: https://api.ip13.com/api/star/

    返回格式: application/json

    请求方式: HTTPGETPOST/JSON

    请求示例: https://api.ip13.com/api/star/index?key=你的密钥

    请求HEADER:

    名称
    Content-Typeapplication/x-www-form-urlencoded;charset:utf-8;

    请求参数说明:

    名称必填类型示例值说明
    keystring35kj5jnlj53453kl5j43nj5接口密钥,在控制台->密钥管理查看
    starstringaries要查询的星座,支持:aries 白羊座, taurus 金牛座, gemini 双子座, cancer 巨蟹座, leo 狮子座, virgo 处女座, libra 天秤座, scorpio 天蝎座, sagittarius 射手座, capricorn 摩羯座, aquarius 水瓶座, pisces 双鱼座

    返回参数说明:

    名称类型说明
    codeint状态码
    msgstring状态信息
    datastring请求结果数据集
    exec_timefloat执行耗时
    user_ipstring客户端IP

    返回示例:

    {"code":"200","msg":"请求成功","data":{"day":{"ji":"过度依赖AI","yi":"优化计划方法","all":"78%","date":"2025-03-14","love":"62%","work":"79%","money":"76%","health":"74%","notice":"一分耕耘一分收获","discuss":"70%","all_text":"整体运势尚可,一分耕耘一分收获的一天。你需要付出比以往更多的汗水与智慧,才能在这片生活的田野上收获到属于自己的果实。这不仅仅是对你外在努力的要求,更是对你内在信念与毅力的考验。你可能会遇到一些看似难以逾越的障碍,但正是这些挑战塑造了更加坚韧不拔的你。在思想上,要摒弃那些不切实际的幻想,脚踏实地地走好每一步。同时,也要学会在努力的过程中寻找乐趣,让奋斗的过程不再枯燥。身体方面,要注意保持良好的作息习惯,确保有足够的精力去应对每一天的挑战。生活方面,可以安排一些与大自然亲近的活动,比如植树、园艺等,让身心在自然中得到滋养与放松。","love_text":"单身的你,可能需要放下对过去某段感情的执着,才能真正打开心扉,迎接新的幸福。试着让自己从过去的阴影中走出来,多关注身边的人和事。已有伴者的你,不要总是沉浸在过去的回忆中,尤其是那些不愉快的经历。要学会珍惜当下的幸福,多关注伴侣的现在和未来,共同创造属于你们的美好时光。","work_text":"你在事业学业上需要寻找新的突破点。你可能感到自己的进步有所停滞,或是遇到了难以逾越的瓶颈。但请相信,这正是你成长的契机。尝试从新的角度思考问题,或是寻求他人的建议,都可能为你带来意想不到的启发。保持积极的心态,勇于尝试新事物,你将能在事业学业上取得新的进展。","lucky_star":"射手座","money_text":"收支基本能够保持平衡。你需关注的是日常开销的合理性,避免不必要的浪费。可以尝试制定一个简单的预算计划,将收入和支出都记录下来。同时,也可以考虑通过兼职或副业来增加一些额外的收入,为未来的财务规划打下更坚实的基础。","health_text":"保护好自己的听力健康。长时间佩戴耳机,尤其是在嘈杂的环境中为了掩盖噪音而加大音量,会对你的耳膜造成损伤。建议你在享受音乐或播客时,每隔一段时间就摘下耳机,让耳朵得到休息。同时,选择音质好、降噪效果佳的耳机也能在一定程度上减少对听力的伤害。","lucky_color":"红色","lucky_number":"9"},"tomorrow":{"ji":"焦虑不安","yi":"参与艺术创作","all":"52%","date":"2025-03-15","love":"58%","work":"53%","money":"56%","health":"54%","notice":"诸事不顺既视感","discuss":"66%","all_text":"整体运势陷入了低迷状态。周围的一切似乎都在与你作对,即便是日常的小事也可能让你感到沮丧和无力。你的心情变得更加敏感,容易受到外界环境和他人的影响。在这样的日子里,你需要学会如何调整自己的心态,不让负面的情绪占据主导。试着从另一个角度看待问题,也许你会发现那些看似困扰的小事其实并不值得太过在意。你可以尝试一些放松的活动,如冥想、瑜伽或是简单的深呼吸练习,帮助自己平复内心的波澜。同时,也要记得给自己一些正面的鼓励,相信自己有能力度过这段低谷期。生活方面,不妨选择一个安静的咖啡馆,点一杯喜欢的饮品,享受一个人的静谧时光,让心灵得到片刻的放松。","love_text":"单身的你,可能会因为过去的伤痛而紧闭心门,拒绝新的可能。但请记住,每一次的相遇都是命运的安排,不妨试着打开心扉,给彼此一个机会。已有伴者的你,需要保持适度的独立,不要过于依赖对方。爱情中,两个人是独立的个体,也是彼此的依靠。给彼此一些空间,让爱情在自由中呼吸,这样才能让关系更加健康持久。","take_star":"","work_text":"你在事业学业上可能会感到有些手忙脚乱,容易在忙碌中出错。你需要更加细心和专注,以避免因粗心大意而导致的失误。同时,也要学会合理安排时间和任务,避免过度劳累和压力过大。建议你在工作中保持冷静和耐心,遇到问题时及时寻求帮助和支持。","lucky_star":"天蝎座","money_text":"财运对你而言并不太乐观,你需要警惕入不敷出的压力。在日常生活中,可能会有一些意外的支出打乱你的财务计划,导致你感到经济上的紧张。建议你仔细审查自己的开销,尽量避免不必要的支出,同时寻找增加收入的机会。","health_text":"容易出现口腔溃疡的问题,这可能会让你的日常生活受到一定影响。为了预防和改善这一问题,建议保持良好的口腔卫生习惯,定期刷牙、使用牙线,并尽量避免食用过于辛辣或刺激性的食物。","lucky_color":"湖蓝色","lucky_number":"3"},"week":{"ji":"依赖他人","yi":"积极合作","all":"76%","date":"2025-03-09~2025-03-15","love":"87%","work":"65%","money":"59%","health":"85%","notice":"努力展现才能","all_text":"本周对于白羊座来说,要坐稳自己的位置,做好自己应该做的事情。保持稳定的心态,不要轻易被外界的影响所动摇。与团队成员积极合作,提升自己的领导力,展现出个人的才能和能力。同时,要注意避免过于冲动和冲突,以免破坏人际关系。","love_text":"对于单身的白羊座来说,本周可能会遇见一个吸引你的人,然而,要谨慎对待这段感情,不要因为一时的冲动而轻率行事。对于有伴侣的人来说,你们可能会因为价值观方面的问题产生分歧,建议通过沟通和妥协来解决问题,避免关系进一步恶化。","work_text":"本周白羊座在事业上可能会面临一些事情,容易导致熬夜赶工的情况。要提前规划好时间和任务,避免任务都聚到一起导致过于忙乱。在学业上,可能会受到聚会等娱乐活动的干扰,要保持积极主动,灵活安排时间,避免影响学习进度。","money_text":"本周要控制好自己的购物欲望,理性对待消费,避免因为一时的冲动而破坏财务稳定。建议制定一个合理的预算计划,避免不必要的开支。","health_text":"本周要注意保持规律的作息时间,合理安排休息和运动,避免身体出现各种小毛病。保持积极的心态,保护好自己的身心健康。"},"month":{"ji":"忽视细节","yi":"享受生活","all":"77%","date":"2025-03-01~2025-03-31","love":"73%","work":"68%","money":"82%","health":"80%","notice":"保持正面心态","all_text":"本月白羊座的综合运势相对较差,可能会面临一些挑战和困难。你可能会感到情绪低落,容易陷入破罐子破摔的阶段。然而,保持积极的态度和端正的心态对于解决问题至关重要。要提高自身的积极性,保持一个正面的心态去处理问题。不要轻易放弃,相信自己的能力,勇敢面对困难,相信一切都会好起来的。","love_text":"单身的白羊座,本月可以多把时间和精力放在娱乐方面,这有助于调整自身状态,摆脱低落的情绪。参加一些社交活动或者和朋友一起出去玩,能够增加自信心,提高自身魅力。有伴侣的白羊座,本月的感情运势会有些起伏,可能会出现一些小矛盾和摩擦。要注意把握相处的节奏,保持良好的沟通和理解,这样彼此之间的和谐度也会有所增加。","work_text":"本月白羊座在事业方面可能会面临一些琐碎的事务,如休假、请假等。这些琐碎的事情可能会影响到你的工作进程,需要调整自己的工作状态,尽快妥善处理这些事务,不要让它们拖延。在学业方面,白羊座需要摆脱娱乐生活的诱惑,专注于学习。制定一个合理的学习计划,培养良好的学习习惯,努力克服拖延症,才能取得更好的学业成果。","money_text":"本月白羊座的财富运势相对稳定,但生活中的开支可能会比较多。需要注意理财,避免不必要的消费。可以考虑适当地开源节流,寻找一些节省开支的方法。同时也要保持理性的消费观念,不要被一时的冲动所左右,量入为出,合理规划财务状况,才能保持稳定的财富状况。","health_text":"本月白羊座的健康方面可能会出现作息不规律或饮食不规律的情况。要注意保持良好的作息习惯,合理安排时间,保证充足的睡眠和休息。在饮食方面,要注意均衡饮食,避免过度沉溺于不健康的食物。适量的运动和放松也是保持健康的重要因素,可以尝试一些放松身心的活动,如瑜伽、冥想等。关注自己的身体状况,及时调整和改善,才能保持健康的状态。"},"year":{"ji":"心神不宁","yi":"节制消费","all":"77%","date":"2025-01-01~2025-12-31","love":"55%","work":"82%","money":"56%","health":"74%","notice":"为目标而努力","all_text":"白羊座在2025年的整体运势中,虽然会遇到一些小波折,但整体趋势向好。这一年,白羊们需要保持清晰的头脑,不被外界的纷扰所影响,始终坚持自己的目标。在追求梦想的过程中,可能会遇到一些让你分心的事情,但只要保持专注,就能稳步前行。记住,保持冷静和耐心是成功的关键。","love_text":"对于白羊座来说,2025年的爱情运势充满变数。单身的白羊可能会遇到意想不到的爱情机会,这时需要慎重考虑是否要迈出新的一步。对于已有伴侣的白羊,要警惕日常琐事对感情的影响,适时的浪漫和惊喜能够为关系增添新鲜感。在爱情中,沟通和理解是维持关系的重要因素。","work_text":"在事业上,白羊座需要展现出强烈的计划性和执行力。随着工作任务的增加,合理规划和分配时间变得尤为重要。在学业上,白羊们需要保持持续的学习动力,不断复习和巩固知识,这对于长期的学术发展至关重要。保持好奇心和学习的热情,将有助于你在学术或职业道路上取得更好的成绩。","money_text":"白羊座在2025年的财务管理上需要更加谨慎。今年适合积累资本,减少不必要的开销,尤其是在情绪波动时,更要避免冲动消费。投资方面,建议采取稳健的策略,不要被市场的短期波动所影响,长期规划和耐心是理财的关键。","health_text":"在健康方面,白羊座需要特别留意眼部健康和过敏问题。定期进行眼部检查,避免长时间对着电子屏幕,以减少眼部疲劳。同时,注意个人卫生,避免接触过敏源,以减少过敏症状的发生。保持健康的生活方式,如均衡饮食和适量运动,对于提升整体健康水平至关重要!!"}},"exec_time":0.218888,"ip":"115.196.70.182"}
    错误码类型说明
    403int没有权限
    400int参数传递不正确
    500int服务器内部错误
    本示例代码演示了接口的基础调用流程,开发者需自行将代码中的默认值替换为实际的API接口认证信息。
    
    <?php
    /**
     * API请求DEMO
     * 
     * 本demo支持常见的HTTP请求方法(GET/POST/PUT/DELETE等)
     */
    
     //基本配置
    $api_key = '你的接口密钥,登录控制台后在密钥管理页面申请';
    $secret_key = '';
    
    // API请求示例:
    try {
        $client = new ApiClient($api_key, $secret_key);
        $client->setTimeout(10);
        $client->setVerifySSL(false); // 关闭SSL验证
    
        // GET请求示例
        echo "=== 开始GET请求 ===\n";
        $response = $client->get('https://api.ip13.com/api/star/', [
            'key' => $api_key,
            'key2' => '其他参数'
        ]);
        print_r($response);
        //print_r($client->getLastRequestInfo());
        /* 
        // POST表单示例
        echo "\n=== 开始POST请求 ===\n";
        $response = $client->post('接口地址', [
            'key' => $api_key,
            'key2' => '其他参数'
        ]);
        print_r($response);
        print_r($client->getLastRequestInfo());
    
        // POST JSON示例
        echo "\n=== 开始POST JSON请求 ===\n";
        $response = $client->postJson('接口地址', [
            'key' => $api_key,
            'key2' => '其他参数'
        ]);
        print_r($response);
        print_r($client->getLastRequestInfo());
         */
    } catch (ApiClientException $e) {
        echo "API请求错误: " . $e->getMessage();
        if ($e->getCode() > 0) {
            echo " (HTTP状态码: " . $e->getCode() . ")";
        }
        print_r($client->getLastRequestInfo() ?? []);
    }
    
    /**
     * API客户端类
     * 
     * 提供了一个简单的HTTP API客户端实现,支持常见的HTTP请求方法(GET/POST/PUT/DELETE等)
     * 具有以下主要功能:
     * - 支持 API 密钥和签名认证
     * - 可配置请求超时和SSL验证
     * - 支持自定义请求头
     * - 支持表单和JSON格式的请求体
     * - 自动解析响应结果
     * - 提供详细的请求信息记录
     * 
     * 使用示例:
     * ```
     * $client = new ApiClient('https://api.example.com', 'api_key', 'secret_key');
     * $response = $client->get('/users', ['page' => 1]);
     * ```
     * 
     * @throws ApiClientException 当API请求失败时抛出异常
     */
    class ApiClient
    {
        private $apiKey;
        private $secretKey;
        private $timeout = 30;
        private $verifySSL = true;
        private $lastRequestInfo = [];
        private $defaultHeaders = [];
    
        /**
         * 构造函数
         * 
         * @param string $apiKey  API密钥(可选)
         * @param string $secretKey 签名密钥(可选)
         */
        public function __construct(string $apiKey = '', string $secretKey = '')
        {
            $this->apiKey = $apiKey;
            $this->secretKey = $secretKey;
        }
    
        /**
         * 设置请求超时时间(秒)
         */
        public function setTimeout(int $seconds): self
        {
            $this->timeout = $seconds;
            return $this;
        }
    
        /**
         * 设置是否验证SSL证书
         */
        public function setVerifySSL(bool $verify): self
        {
            $this->verifySSL = $verify;
            return $this;
        }
    
        /**
         * 添加默认请求头
         */
        public function addDefaultHeader(string $name, string $value): self
        {
            $this->defaultHeaders[$name] = $value;
            return $this;
        }
    
        /**
         * 发送GET请求
         * 
         * @param string $endpoint 接口端点
         * @param array  $query    查询参数
         * @param array  $headers  额外请求头
         */
        public function get(string $endpoint, array $query = [], array $headers = []): array
        {
            return $this->request('GET', $endpoint, [
                'query' => $query,
                'headers' => $headers
            ]);
        }
    
        /**
         * 发送POST请求(表单格式)
         * 
         * @param string $endpoint 接口端点
         * @param array  $data     POST数据
         * @param array  $headers  额外请求头
         */
        public function post(string $endpoint, array $data = [], array $headers = []): array
        {
            return $this->request('POST', $endpoint, [
                'form_data' => $data,
                'headers' => $headers
            ]);
        }
    
        /**
         * 发送POST请求(JSON格式)
         * 
         * @param string $endpoint 接口端点
         * @param array  $data     POST数据
         * @param array  $headers  额外请求头
         */
        public function postJson(string $endpoint, array $data = [], array $headers = []): array
        {
            return $this->request('POST', $endpoint, [
                'json' => $data,
                'headers' => array_merge(['Content-Type' => 'application/json'], $headers)
            ]);
        }
    
        /**
         * 发送PUT请求
         */
        public function put(string $endpoint, array $data = [], array $headers = []): array
        {
            return $this->request('PUT', $endpoint, [
                'json' => $data,
                'headers' => $headers
            ]);
        }
    
        /**
         * 发送DELETE请求
         */
        public function delete(string $endpoint, array $data = [], array $headers = []): array
        {
            return $this->request('DELETE', $endpoint, [
                'json' => $data,
                'headers' => $headers
            ]);
        }
    
        /**
         * 获取最后一次请求的详细信息
         */
        public function getLastRequestInfo(): array
        {
            return $this->lastRequestInfo;
        }
    
        /**
         * 基础请求方法
         */
        private function request(string $method, string $endpoint, array $options = []): array
        {
            // 初始化cURL
            $ch = curl_init();
            $url = ltrim($endpoint, '/');
    
            // 准备请求头
            $headers = $this->prepareHeaders($options['headers'] ?? []);
    
            // 处理查询参数
            if (!empty($options['query'])) {
                $url .= '?' . http_build_query($options['query']);
            }
    
            // 处理请求体
            $postData = null;
            if (isset($options['form_data'])) {
                $postData = http_build_query($options['form_data']);
                $headers[] = 'Content-Type: application/x-www-form-urlencoded';
            } elseif (isset($options['json'])) {
                $postData = json_encode($options['json']);
                $headers[] = 'Content-Type: application/json';
            }
    
            // 设置cURL选项
            curl_setopt_array($ch, [
                CURLOPT_URL => $url,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_CUSTOMREQUEST => $method,
                CURLOPT_HTTPHEADER => $headers,
                CURLOPT_TIMEOUT => $this->timeout,
                CURLOPT_SSL_VERIFYPEER => $this->verifySSL,
                CURLOPT_SSL_VERIFYHOST => $this->verifySSL,
                CURLOPT_HEADER => true,
            ]);
    
            if ($method !== 'GET' && $postData !== null) {
                curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
            }
    
            // 执行请求
            $response = curl_exec($ch);
            $error = curl_error($ch);
            $info = $this->lastRequestInfo = curl_getinfo($ch);
            curl_close($ch);
    
            // 处理错误
            if ($error) {
                throw new ApiClientException("cURL请求失败: " . $error);
            }
    
            // 分离响应头和响应体
            $headerSize = $info['header_size'];
            $responseHeaders = substr($response, 0, $headerSize);
            $responseBody = substr($response, $headerSize);
    
            // 解析响应
            $result = json_decode($responseBody, true) ?? $responseBody;
    
            // 检查HTTP状态码
            if ($info['http_code'] >= 400) {
                $errorMsg = is_array($result) ? ($result['message'] ?? $responseBody) : $responseBody;
                throw new ApiClientException("API请求失败: " . $errorMsg, $info['http_code']);
            }
    
            return [
                'status' => $info['http_code'],
                'headers' => $this->parseHeaders($responseHeaders),
                'data' => $result
            ];
        }
    
        /**
         * 准备请求头(自动添加签名)
         */
        private function prepareHeaders(array $headers): array
        {
            // 合并默认头
            $headers = array_merge($this->defaultHeaders, $headers);
    
            // 添加签名头
            if ($this->apiKey && $this->secretKey) {
                $timestamp = time();
                $signString = "key={$this->apiKey}&timestamp={$timestamp}";
                $signature = hash_hmac('sha256', $signString, $this->secretKey);
    
                $headers['X-Api-Key'] = $this->apiKey;
                $headers['X-Api-Timestamp'] = $timestamp;
                $headers['X-Api-Sign'] = $signature;
            }
    
            // 转换为cURL格式
            $curlHeaders = [];
            foreach ($headers as $name => $value) {
                $curlHeaders[] = "$name: $value";
            }
    
            return $curlHeaders;
        }
    
        /**
         * 解析响应头
         */
        private function parseHeaders(string $headers): array
        {
            $parsed = [];
            foreach (explode("\r\n", $headers) as $i => $line) {
                if ($i === 0) {
                    $parsed['HTTP_CODE'] = $line;
                } else {
                    $parts = explode(': ', $line, 2);
                    if (count($parts) === 2) {
                        $parsed[$parts[0]] = $parts[1];
                    }
                }
            }
            return $parsed;
        }
    }
    
    class ApiClientException extends \Exception
    {
        // 自定义异常类
    }
    
    
    
    
    
    
    /**
     * 原生JS通用API请求函数(支持GET/POST,JSON格式)
     * @param {string} url - API接口完整地址
     * @param {string} method - 请求方法,仅支持GET/POST
     * @param {object} [data={}] - 请求参数(GET拼接到URL,POST作为JSON请求体)
     * @returns {Promise} - 返回接口响应的JSON数据
     */
    async function requestApi(url, method, data = {}) {
      try {
        // 处理GET请求:拼接参数到URL
        let requestUrl = url;
        if (method.toUpperCase() === 'GET' && Object.keys(data).length > 0) {
          const params = new URLSearchParams(data).toString();
          requestUrl = `${requestUrl}${requestUrl.includes('?') ? '&' : '?'}${params}`;
        }
    
        // 配置请求选项
        const requestOptions = {
          method: method.toUpperCase(),
          headers: { 'Content-Type': 'application/json' },
          credentials: 'include' // 跨域时携带Cookie,不需要可改为omit
        };
    
        // 处理POST请求:设置JSON请求体
        if (method.toUpperCase() === 'POST') {
          requestOptions.body = JSON.stringify(data);
        }
    
        // 发送请求并处理响应
        const response = await fetch(requestUrl, requestOptions);
        if (!response.ok) throw new Error(`请求失败:${response.status} ${response.statusText}`);
        const result = await response.json(); // 自动解析JSON响应
        return result;
    
      } catch (error) {
        console.error('API请求错误:', error.message);
        throw error; // 抛出错误供调用方处理
      }
    }
    
    // -------------------------- 使用示例 --------------------------
    // 1. GET请求示例(查询数据)
    async function testGet() {
      try {
        const data = await requestApi(
          'https://api.example.com/user/list', // 替换为实际接口地址
          'GET',
          { page: 1, size: 10, keyword: 'test' } // GET请求参数
        );
        console.log('GET请求成功:', data);
        // 业务逻辑处理...
      } catch (err) {
        alert('GET请求失败:' + err.message);
      }
    }
    
    // 2. POST请求示例(提交数据)
    async function testPost() {
      try {
        const data = await requestApi(
          'https://api.example.com/user/login', // 替换为实际接口地址
          'POST',
          { username: 'admin', password: '123456' } // POST请求体数据
        );
        console.log('POST请求成功:', data);
        // 业务逻辑处理...
      } catch (err) {
        alert('POST请求失败:' + err.message);
      }
    }
    
    // 执行请求(按需调用)
    // testGet();
    // testPost();
    
    
    import okhttp3.*;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.concurrent.TimeUnit;
    
    /**
     * Java 单文件实现GET/POST(JSON) API请求
     * 基于OkHttp和Jackson,复制后直接使用(需添加Maven/Gradle依赖)
     */
    public class ApiRequest {
        // 全局OkHttpClient实例(复用连接池)
        private static final OkHttpClient OK_HTTP_CLIENT = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .readTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(10, TimeUnit.SECONDS)
                .build();
    
        // Jackson JSON解析工具
        private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
    
        /**
         * GET请求方法
         * @param url 接口地址
         * @param params URL参数键值对
         * @return 接口响应字符串
         * @throws IOException 网络异常
         */
        public static String doGet(String url, Map params) throws IOException {
            HttpUrl.Builder urlBuilder = HttpUrl.parse(url).newBuilder();
            if (params != null && !params.isEmpty()) {
                for (Map.Entry entry : params.entrySet()) {
                    urlBuilder.addQueryParameter(entry.getKey(), entry.getValue());
                }
            }
            Request request = new Request.Builder().url(urlBuilder.build()).get().build();
            try (Response response = OK_HTTP_CLIENT.newCall(request).execute()) {
                if (!response.isSuccessful()) {
                    throw new IOException("GET请求失败:" + response.code() + " " + response.message());
                }
                return response.body() != null ? response.body().string() : "";
            }
        }
    
        /**
         * POST(JSON)请求方法
         * @param url 接口地址
         * @param jsonStr JSON请求体字符串
         * @return 接口响应字符串
         * @throws IOException 网络异常
         */
        public static String doPostJson(String url, String jsonStr) throws IOException {
            MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
            RequestBody requestBody = RequestBody.create(mediaType, jsonStr);
            Request request = new Request.Builder().url(url).post(requestBody).build();
            try (Response response = OK_HTTP_CLIENT.newCall(request).execute()) {
                if (!response.isSuccessful()) {
                    throw new IOException("POST请求失败:" + response.code() + " " + response.message());
                }
                return response.body() != null ? response.body().string() : "";
            }
        }
    
        /**
         * 格式化JSON字符串(便于阅读)
         * @param jsonStr 原始JSON字符串
         * @return 格式化后的JSON
         * @throws IOException 解析异常
         */
        public static String formatJson(String jsonStr) throws IOException {
            if (jsonStr == null || jsonStr.isEmpty()) {
                return "";
            }
            Object jsonObj = OBJECT_MAPPER.readValue(jsonStr, Object.class);
            return OBJECT_MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(jsonObj);
        }
    
        // 主方法:测试GET/POST请求
        public static void main(String[] args) {
            try {
                // ------------------- 测试GET请求 -------------------
                String getUrl = "https://api.example.com/user/list"; // 替换为实际接口地址
                Map getParams = new HashMap<>();
                getParams.put("page", "1");
                getParams.put("size", "10");
                getParams.put("keyword", "test");
                String getResponse = doGet(getUrl, getParams);
                System.out.println("=== GET请求响应结果 ===");
                System.out.println(formatJson(getResponse));
    
                System.out.println("------------------------");
    
                // ------------------- 测试POST请求 -------------------
                String postUrl = "https://api.example.com/user/login"; // 替换为实际接口地址
                Map postData = new HashMap<>();
                postData.put("username", "admin");
                postData.put("password", "123456");
                String jsonStr = OBJECT_MAPPER.writeValueAsString(postData);
                String postResponse = doPostJson(postUrl, jsonStr);
                System.out.println("=== POST请求响应结果 ===");
                System.out.println(formatJson(postResponse));
    
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    
    package main
    
    import (
    	"bytes"
    	"encoding/json"
    	"fmt"
    	"io/ioutil"
    	"net/http"
    	"net/url"
    	"time"
    )
    
    // 全局HTTP客户端,设置超时时间
    var httpClient = &http.Client{
    	Timeout: 10 * time.Second, // 请求超时时间10秒
    }
    
    // DoGet 发送GET请求,自动拼接URL参数
    // urlStr: 接口地址
    // params: URL查询参数(键值对)
    // 返回:响应体字符串、错误信息
    func DoGet(urlStr string, params map[string]string) (string, error) {
    	// 解析基础URL
    	parsedUrl, err := url.Parse(urlStr)
    	if err != nil {
    		return "", fmt.Errorf("URL解析失败: %v", err)
    	}
    
    	// 拼接查询参数
    	query := parsedUrl.Query()
    	for key, value := range params {
    		query.Add(key, value)
    	}
    	parsedUrl.RawQuery = query.Encode()
    
    	// 发送GET请求
    	resp, err := httpClient.Get(parsedUrl.String())
    	if err != nil {
    		return "", fmt.Errorf("GET请求失败: %v", err)
    	}
    	defer resp.Body.Close() // 确保响应体关闭
    
    	// 检查响应状态码
    	if resp.StatusCode < 200 || resp.StatusCode >= 300 {
    		return "", fmt.Errorf("请求返回异常状态码: %d", resp.StatusCode)
    	}
    
    	// 读取响应体
    	body, err := ioutil.ReadAll(resp.Body)
    	if err != nil {
    		return "", fmt.Errorf("读取响应体失败: %v", err)
    	}
    
    	return string(body), nil
    }
    
    // DoPostJson 发送POST请求,JSON格式请求体
    // urlStr: 接口地址
    // data: 请求体数据(任意可序列化为JSON的结构体/Map)
    // 返回:响应体字符串、错误信息
    func DoPostJson(urlStr string, data interface{}) (string, error) {
    	// 将数据序列化为JSON字节流
    	jsonData, err := json.Marshal(data)
    	if err != nil {
    		return "", fmt.Errorf("JSON序列化失败: %v", err)
    	}
    
    	// 发送POST请求
    	resp, err := httpClient.Post(urlStr, "application/json", bytes.NewBuffer(jsonData))
    	if err != nil {
    		return "", fmt.Errorf("POST请求失败: %v", err)
    	}
    	defer resp.Body.Close()
    
    	// 检查响应状态码
    	if resp.StatusCode < 200 || resp.StatusCode >= 300 {
    		return "", fmt.Errorf("请求返回异常状态码: %d", resp.StatusCode)
    	}
    
    	// 读取响应体
    	body, err := ioutil.ReadAll(resp.Body)
    	if err != nil {
    		return "", fmt.Errorf("读取响应体失败: %v", err)
    	}
    
    	return string(body), nil
    }
    
    // FormatJson 格式化JSON字符串(便于控制台阅读)
    func FormatJson(jsonStr string) string {
    	var prettyJson bytes.Buffer
    	err := json.Indent(&prettyJson, []byte(jsonStr), "", "  ")
    	if err != nil {
    		return jsonStr // 格式化失败则返回原字符串
    	}
    	return prettyJson.String()
    }
    
    func main() {
    	// ------------------- 测试GET请求 -------------------
    	fmt.Println("=== 开始测试GET请求 ===")
    	getUrl := "https://api.example.com/user/list" // 替换为实际接口地址
    	getParams := map[string]string{
    		"page":    "1",
    		"size":    "10",
    		"keyword": "test",
    	}
    	getResp, err := DoGet(getUrl, getParams)
    	if err != nil {
    		fmt.Printf("GET请求出错: %v\n", err)
    	} else {
    		fmt.Println("GET请求响应结果:\n", FormatJson(getResp))
    	}
    
    	fmt.Println("------------------------")
    
    	// ------------------- 测试POST请求 -------------------
    	fmt.Println("=== 开始测试POST请求 ===")
    	postUrl := "https://api.example.com/user/login" // 替换为实际接口地址
    	// 定义POST请求体(可替换为自定义结构体)
    	postData := map[string]string{
    		"username": "admin",
    		"password": "123456",
    	}
    	postResp, err := DoPostJson(postUrl, postData)
    	if err != nil {
    		fmt.Printf("POST请求出错: %v\n", err)
    	} else {
    		fmt.Println("POST请求响应结果:\n", FormatJson(postResp))
    	}
    }
    
    
    import requests
    import json
    
    # 配置全局请求超时时间(单位:秒)
    TIMEOUT = 10
    
    def do_get(url: str, params: dict = None) -> str:
        """
        发送GET请求
        :param url: 接口地址
        :param params: URL查询参数(字典)
        :return: 响应体字符串(格式化后的JSON)
        :raises Exception: 请求失败时抛出异常
        """
        try:
            # 发送GET请求
            response = requests.get(url, params=params, timeout=TIMEOUT)
            # 检查响应状态码
            response.raise_for_status()
            # 返回格式化后的JSON字符串
            return json.dumps(response.json(), indent=2, ensure_ascii=False)
        except requests.exceptions.RequestException as e:
            raise Exception(f"GET请求失败: {str(e)}")
    
    def do_post_json(url: str, data: dict = None) -> str:
        """
        发送POST请求(JSON格式请求体)
        :param url: 接口地址
        :param data: JSON请求体(字典)
        :return: 响应体字符串(格式化后的JSON)
        :raises Exception: 请求失败时抛出异常
        """
        try:
            # 发送POST请求,自动设置Content-Type为application/json
            response = requests.post(url, json=data, timeout=TIMEOUT)
            # 检查响应状态码
            response.raise_for_status()
            # 返回格式化后的JSON字符串
            return json.dumps(response.json(), indent=2, ensure_ascii=False)
        except requests.exceptions.RequestException as e:
            raise Exception(f"POST请求失败: {str(e)}")
    
    if __name__ == "__main__":
        # ------------------- 测试GET请求 -------------------
        print("=== 开始测试GET请求 ===")
        get_url = "https://api.example.com/user/list"  # 替换为实际接口地址
        get_params = {
            "page": 1,
            "size": 10,
            "keyword": "test"
        }
        try:
            get_resp = do_get(get_url, get_params)
            print("GET请求响应结果:\n", get_resp)
        except Exception as e:
            print(e)
    
        print("-" * 40)
    
        # ------------------- 测试POST请求 -------------------
        print("=== 开始测试POST请求 ===")
        post_url = "https://api.example.com/user/login"  # 替换为实际接口地址
        post_data = {
            "username": "admin",
            "password": "123456"
        }
        try:
            post_resp = do_post_json(post_url, post_data)
            print("POST请求响应结果:\n", post_resp)
        except Exception as e:
            print(e)
    
    
    
    const http = require('http');
    const https = require('https');
    const querystring = require('querystring');
    
    /**
     * 通用请求函数(支持GET/POST,JSON格式)
     * @param {string} url - 接口完整地址
     * @param {string} method - GET/POST
     * @param {object} [data={}] - 请求参数(GET拼URL,POST为JSON体)
     * @returns {Promise} - 响应JSON数据
     */
    function requestApi(url, method, data = {}) {
      return new Promise((resolve, reject) => {
        // 解析URL
        const urlObj = new URL(url);
        const isHttps = urlObj.protocol === 'https:';
        const client = isHttps ? https : http;
    
        // 处理GET参数
        let path = urlObj.pathname;
        if (method.toUpperCase() === 'GET' && Object.keys(data).length > 0) {
          const params = querystring.stringify(data);
          path += (urlObj.search ? '&' : '?') + params;
        }
    
        // 处理POST请求体
        let postData = '';
        if (method.toUpperCase() === 'POST') {
          postData = JSON.stringify(data);
        }
    
        // 配置请求选项
        const options = {
          hostname: urlObj.hostname,
          port: urlObj.port || (isHttps ? 443 : 80),
          path: path + urlObj.search,
          method: method.toUpperCase(),
          headers: {
            'Content-Type': 'application/json; charset=utf-8',
            'Content-Length': Buffer.byteLength(postData)
          }
        };
    
        // 发送请求
        const req = client.request(options, (res) => {
          let rawData = '';
          res.on('data', (chunk) => { rawData += chunk; });
          res.on('end', () => {
            try {
              // 解析JSON响应
              const result = JSON.parse(rawData);
              resolve(result);
            } catch (err) {
              reject(new Error(`响应解析失败: ${err.message}`));
            }
          });
        });
    
        // 错误处理
        req.on('error', (err) => {
          reject(new Error(`请求失败: ${err.message}`));
        });
    
        // 写入POST请求体
        if (method.toUpperCase() === 'POST') {
          req.write(postData);
        }
        req.end();
      });
    }
    
    // 测试主函数
    async function main() {
      try {
        // ------------------- 测试GET请求 -------------------
        console.log('=== 开始测试GET请求 ===');
        const getUrl = 'https://api.example.com/user/list'; // 替换为实际接口
        const getParams = { page: 1, size: 10, keyword: 'test' };
        const getResult = await requestApi(getUrl, 'GET', getParams);
        console.log('GET请求响应:', JSON.stringify(getResult, null, 2));
    
        console.log('------------------------');
    
        // ------------------- 测试POST请求 -------------------
        console.log('=== 开始测试POST请求 ===');
        const postUrl = 'https://api.example.com/user/login'; // 替换为实际接口
        const postData = { username: 'admin', password: '123456' };
        const postResult = await requestApi(postUrl, 'POST', postData);
        console.log('POST请求响应:', JSON.stringify(postResult, null, 2));
      } catch (err) {
        console.error('请求出错:', err.message);
      }
    }
    
    // 执行测试
    main();
    
    
    
    #include 
    #include 
    #include 
    #include 
    
    // 定义缓冲区结构体,用于存储响应数据
    typedef struct {
        char* data;
        size_t size;
    } ResponseBuffer;
    
    // libcurl的写回调函数,将响应数据写入缓冲区
    static size_t write_callback(void* contents, size_t size, size_t nmemb, void* userp) {
        size_t realsize = size * nmemb;
        ResponseBuffer* buffer = (ResponseBuffer*)userp;
    
        // 重新分配内存存储响应数据
        char* temp = realloc(buffer->data, buffer->size + realsize + 1);
        if (temp == NULL) {
            fprintf(stderr, "内存分配失败!\n");
            return 0;
        }
        buffer->data = temp;
        memcpy(&(buffer->data[buffer->size]), contents, realsize);
        buffer->size += realsize;
        buffer->data[buffer->size] = '\0'; // 字符串结束符
    
        return realsize;
    }
    
    // 初始化响应缓冲区
    void init_buffer(ResponseBuffer* buffer) {
        buffer->data = malloc(1);
        buffer->size = 0;
    }
    
    // 释放响应缓冲区内存
    void free_buffer(ResponseBuffer* buffer) {
        free(buffer->data);
        buffer->data = NULL;
        buffer->size = 0;
    }
    
    /**
     * 发送GET请求
     * @param url 接口地址
     * @param params URL参数(格式:"key1=value1&key2=value2",传NULL则无参数)
     * @return 响应字符串(需手动free释放),失败返回NULL
     */
    char* http_get(const char* url, const char* params) {
        CURL* curl = curl_easy_init();
        if (!curl) {
            fprintf(stderr, "CURL初始化失败!\n");
            return NULL;
        }
    
        ResponseBuffer buffer;
        init_buffer(&buffer);
    
        // 拼接GET请求的URL和参数
        char* full_url = NULL;
        if (params && strlen(params) > 0) {
            full_url = (char*)malloc(strlen(url) + strlen(params) + 2);
            sprintf(full_url, "%s?%s", url, params);
        } else {
            full_url = (char*)malloc(strlen(url) + 1);
            strcpy(full_url, url);
        }
    
        // 设置CURL选项
        curl_easy_setopt(curl, CURLOPT_URL, full_url);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10L); // 超时时间10秒
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); // 跟随重定向
    
        // 执行GET请求
        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK) {
            fprintf(stderr, "GET请求失败: %s\n", curl_easy_strerror(res));
            free_buffer(&buffer);
            free(full_url);
            curl_easy_cleanup(curl);
            return NULL;
        }
    
        // 检查响应状态码
        long response_code;
        curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
        if (response_code < 200 || response_code >= 300) {
            fprintf(stderr, "GET请求返回异常状态码: %ld\n", response_code);
            free_buffer(&buffer);
            free(full_url);
            curl_easy_cleanup(curl);
            return NULL;
        }
    
        // 释放资源
        free(full_url);
        curl_easy_cleanup(curl);
    
        // 返回响应数据(需调用者手动free)
        return buffer.data;
    }
    
    /**
     * 发送POST请求(JSON格式请求体)
     * @param url 接口地址
     * @param json_data JSON请求体字符串
     * @return 响应字符串(需手动free释放),失败返回NULL
     */
    char* http_post_json(const char* url, const char* json_data) {
        CURL* curl = curl_easy_init();
        if (!curl) {
            fprintf(stderr, "CURL初始化失败!\n");
            return NULL;
        }
    
        ResponseBuffer buffer;
        init_buffer(&buffer);
    
        // 设置CURL选项
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10L); // 超时时间10秒
        curl_easy_setopt(curl, CURLOPT_POST, 1L); // 启用POST请求
    
        // 设置JSON请求体和请求头
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Content-Type: application/json; charset=utf-8");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_data);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(json_data));
    
        // 执行POST请求
        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK) {
            fprintf(stderr, "POST请求失败: %s\n", curl_easy_strerror(res));
            free_buffer(&buffer);
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
            return NULL;
        }
    
        // 检查响应状态码
        long response_code;
        curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
        if (response_code < 200 || response_code >= 300) {
            fprintf(stderr, "POST请求返回异常状态码: %ld\n", response_code);
            free_buffer(&buffer);
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
            return NULL;
        }
    
        // 释放资源
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    
        // 返回响应数据(需调用者手动free)
        return buffer.data;
    }
    
    int main(void) {
        // 初始化libcurl
        curl_global_init(CURL_GLOBAL_ALL);
    
        // ------------------- 测试GET请求 -------------------
        printf("=== 开始测试GET请求 ===\n");
        const char* get_url = "https://api.example.com/user/list"; // 替换为实际接口
        const char* get_params = "page=1&size=10&keyword=test";   // GET参数
        char* get_resp = http_get(get_url, get_params);
        if (get_resp) {
            printf("GET请求响应结果:\n%s\n", get_resp);
            free(get_resp); // 释放响应内存
        }
    
        printf("------------------------\n");
    
        // ------------------- 测试POST请求 -------------------
        printf("=== 开始测试POST请求 ===\n");
        const char* post_url = "https://api.example.com/user/login"; // 替换为实际接口
        const char* post_json = "{\"username\":\"admin\",\"password\":\"123456\"}"; // JSON请求体
        char* post_resp = http_post_json(post_url, post_json);
        if (post_resp) {
            printf("POST请求响应结果:\n%s\n", post_resp);
            free(post_resp); // 释放响应内存
        }
    
        // 清理libcurl全局资源
        curl_global_cleanup();
        return 0;
    }
    
    
    
    #include 
    #include 
    #include 
    #include 
    
    // 响应数据缓冲区类,封装内存管理
    class ResponseBuffer {
    public:
        std::string data; // 存储响应数据的字符串,自动管理内存
    
        // libcurl写回调函数,将响应数据写入缓冲区
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp) {
            size_t realSize = size * nmemb;
            ResponseBuffer* buffer = static_cast(userp);
            buffer->data.append(static_cast(contents), realSize);
            return realSize;
        }
    };
    
    // HTTP请求工具类,封装GET/POST(JSON)方法
    class HttpRequester {
    private:
        CURL* curl; // CURL句柄
        long timeout; // 请求超时时间(秒)
    
    public:
        // 构造函数:初始化CURL
        HttpRequester(long timeout = 10) : timeout(timeout) {
            curl_global_init(CURL_GLOBAL_ALL);
            curl = curl_easy_init();
            if (!curl) {
                throw std::runtime_error("CURL初始化失败!");
            }
            // 设置全局超时
            curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout);
            // 跟随HTTP重定向
            curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
        }
    
        // 析构函数:释放CURL资源
        ~HttpRequester() {
            if (curl) {
                curl_easy_cleanup(curl);
            }
            curl_global_cleanup();
        }
    
        // 禁用拷贝构造和赋值,避免资源重复释放
        HttpRequester(const HttpRequester&) = delete;
        HttpRequester& operator=(const HttpRequester&) = delete;
    
        /**
         * 发送GET请求
         * @param url 接口地址
         * @param params URL参数(格式:"key1=value1&key2=value2")
         * @return 响应字符串
         * @throws std::runtime_error 请求失败时抛出异常
         */
        std::string Get(const std::string& url, const std::string& params = "") {
            if (!curl) {
                throw std::runtime_error("CURL句柄未初始化");
            }
    
            // 拼接完整URL(带参数)
            std::string fullUrl = url;
            if (!params.empty()) {
                fullUrl += "?" + params;
            }
    
            ResponseBuffer buffer;
            // 设置CURL选项
            curl_easy_setopt(curl, CURLOPT_URL, fullUrl.c_str());
            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ResponseBuffer::WriteCallback);
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
    
            // 执行GET请求
            CURLcode res = curl_easy_perform(curl);
            if (res != CURLE_OK) {
                throw std::runtime_error("GET请求失败: " + std::string(curl_easy_strerror(res)));
            }
    
            // 检查响应状态码
            long responseCode;
            curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &responseCode);
            if (responseCode < 200 || responseCode >= 300) {
                throw std::runtime_error("GET请求返回异常状态码: " + std::to_string(responseCode));
            }
    
            return buffer.data;
        }
    
        /**
         * 发送POST请求(JSON格式请求体)
         * @param url 接口地址
         * @param jsonData JSON请求体字符串
         * @return 响应字符串
         * @throws std::runtime_error 请求失败时抛出异常
         */
        std::string PostJson(const std::string& url, const std::string& jsonData) {
            if (!curl) {
                throw std::runtime_error("CURL句柄未初始化");
            }
    
            ResponseBuffer buffer;
            // 设置POST请求基础选项
            curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
            curl_easy_setopt(curl, CURLOPT_POST, 1L); // 启用POST方法
            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonData.c_str()); // 设置请求体
            curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, jsonData.length()); // 设置请求体长度
            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ResponseBuffer::WriteCallback);
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
    
            // 设置JSON请求头
            struct curl_slist* headers = nullptr;
            headers = curl_slist_append(headers, "Content-Type: application/json; charset=utf-8");
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
    
            // 执行POST请求
            CURLcode res = curl_easy_perform(curl);
            // 释放请求头链表(无论请求成功与否都要释放)
            curl_slist_free_all(headers);
    
            if (res != CURLE_OK) {
                throw std::runtime_error("POST请求失败: " + std::string(curl_easy_strerror(res)));
            }
    
            // 检查响应状态码
            long responseCode;
            curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &responseCode);
            if (responseCode < 200 || responseCode >= 300) {
                throw std::runtime_error("POST请求返回异常状态码: " + std::to_string(responseCode));
            }
    
            return buffer.data;
        }
    };
    
    // 主函数:测试GET/POST请求
    int main() {
        try {
            // 创建HTTP请求器实例
            HttpRequester requester;
    
            // ------------------- 测试GET请求 -------------------
            std::cout << "=== 开始测试GET请求 ===" << std::endl;
            std::string getUrl = "https://api.example.com/user/list"; // 替换为实际接口
            std::string getParams = "page=1&size=10&keyword=test";   // GET参数
            std::string getResp = requester.Get(getUrl, getParams);
            std::cout << "GET请求响应结果:\n" << getResp << std::endl;
    
            std::cout << "------------------------" << std::endl;
    
            // ------------------- 测试POST请求 -------------------
            std::cout << "=== 开始测试POST请求 ===" << std::endl;
            std::string postUrl = "https://api.example.com/user/login"; // 替换为实际接口
            std::string postJson = R"({"username":"admin","password":"123456"})"; // JSON请求体(原生字符串避免转义)
            std::string postResp = requester.PostJson(postUrl, postJson);
            std::cout << "POST请求响应结果:\n" << postResp << std::endl;
    
        } catch (const std::exception& e) {
            // 捕获所有异常并打印
            std::cerr << "请求出错: " << e.what() << std::endl;
            return 1;
        }
    
        return 0;
    }
    
    
    
    using System;
    using System.Net.Http;
    using System.Text;
    using System.Threading.Tasks;
    using System.Text.Json;
    
    /// 
    /// HTTP请求工具类,封装GET/POST(JSON)请求
    /// 
    public class HttpRequester
    {
        // 静态HttpClient实例(推荐单例使用,避免频繁创建释放连接)
        private static readonly HttpClient _httpClient = new HttpClient
        {
            Timeout = TimeSpan.FromSeconds(10) // 设置10秒超时
        };
    
        /// 
        /// 发送GET请求
        /// 
        /// 接口完整地址
        /// URL查询参数(键值对)
        /// 格式化后的JSON响应字符串
        /// 请求失败时抛出异常
        public static async Task GetAsync(string url, System.Collections.Generic.Dictionary paramsDict = null)
        {
            // 拼接查询参数
            if (paramsDict != null && paramsDict.Count > 0)
            {
                var queryBuilder = new System.Text.StringBuilder();
                foreach (var pair in paramsDict)
                {
                    queryBuilder.Append($"{Uri.EscapeDataString(pair.Key)}={Uri.EscapeDataString(pair.Value)}&");
                }
                string query = queryBuilder.ToString().TrimEnd('&');
                url += $"{(url.Contains("?") ? "&" : "?")}{query}";
            }
    
            // 发送GET请求
            using var response = await _httpClient.GetAsync(url);
            // 检查响应状态码,非2xx则抛出异常
            response.EnsureSuccessStatusCode();
    
            // 读取响应并格式化JSON
            string jsonResponse = await response.Content.ReadAsStringAsync();
            return FormatJson(jsonResponse);
        }
    
        /// 
        /// 发送POST请求(JSON格式请求体)
        /// 
        /// 接口完整地址
        /// 请求体数据(任意可序列化的对象)
        /// 格式化后的JSON响应字符串
        /// 请求失败时抛出异常
        public static async Task PostJsonAsync(string url, T data)
        {
            // 将对象序列化为JSON字符串
            string jsonData = JsonSerializer.Serialize(data, new JsonSerializerOptions { WriteIndented = false });
            // 构造JSON请求体
            using var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
            // 发送POST请求
            using var response = await _httpClient.PostAsync(url, content);
            // 检查响应状态码
            response.EnsureSuccessStatusCode();
    
            // 读取响应并格式化JSON
            string jsonResponse = await response.Content.ReadAsStringAsync();
            return FormatJson(jsonResponse);
        }
    
        /// 
        /// 格式化JSON字符串(便于阅读)
        /// 
        private static string FormatJson(string json)
        {
            if (string.IsNullOrEmpty(json)) return json;
            var jsonDoc = JsonDocument.Parse(json);
            return JsonSerializer.Serialize(jsonDoc, new JsonSerializerOptions { WriteIndented = true });
        }
    }
    
    /// 
    /// 测试类,包含主函数
    /// 
    class Program
    {
        // C# 7.1+支持Main方法为async
        static async Task Main(string[] args)
        {
            try
            {
                // ------------------- 测试GET请求 -------------------
                Console.WriteLine("=== 开始测试GET请求 ===");
                string getUrl = "https://api.example.com/user/list"; // 替换为实际接口
                var getParams = new System.Collections.Generic.Dictionary
                {
                    { "page", "1" },
                    { "size", "10" },
                    { "keyword", "test" }
                };
                string getResponse = await HttpRequester.GetAsync(getUrl, getParams);
                Console.WriteLine("GET请求响应结果:\n" + getResponse);
    
                Console.WriteLine("------------------------");
    
                // ------------------- 测试POST请求 -------------------
                Console.WriteLine("=== 开始测试POST请求 ===");
                string postUrl = "https://api.example.com/user/login"; // 替换为实际接口
                // 定义请求体对象(可替换为自定义类)
                var postData = new
                {
                    username = "admin",
                    password = "123456"
                };
                string postResponse = await HttpRequester.PostJsonAsync(postUrl, postData);
                Console.WriteLine("POST请求响应结果:\n" + postResponse);
            }
            catch (HttpRequestException ex)
            {
                Console.WriteLine($"请求失败: {ex.Message}");
                if (ex.InnerException != null)
                {
                    Console.WriteLine($"内部异常: {ex.InnerException.Message}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"程序异常: {ex.Message}");
            }
    
            // 防止控制台立即关闭
            Console.WriteLine("\n按任意键退出...");
            Console.ReadKey();
        }
    }
    
    
    
    ' 引入必要的命名空间
    Imports System
    Imports System.Net.Http
    Imports System.Text
    Imports System.Threading.Tasks
    Imports System.Collections.Generic
    Imports System.Text.Json
    Imports System.Net.Http.Headers
    
    ''' 
    ''' HTTP请求工具类,封装GET/POST(JSON)核心逻辑
    ''' 基于.NET内置HttpClient,支持异步请求、JSON序列化/反序列化
    ''' 
    Public Class HttpHelper
        ' 静态HttpClient单例(推荐单例使用,避免端口耗尽)
        Private Shared ReadOnly _httpClient As New HttpClient With {
            .Timeout = TimeSpan.FromSeconds(10) ' 设置10秒请求超时
        }
    
        ''' 
        ''' 发送GET请求,自动拼接URL参数
        ''' 
        ''' 接口基础地址
        ''' URL查询参数(键值对)
        ''' 格式化后的JSON响应字符串
        Public Shared Async Function SendGetRequestAsync(baseUrl As String, Optional parameters As Dictionary(Of String, String) = Nothing) As Task(Of String)
            Try
                ' 拼接查询参数
                Dim requestUrl As String = baseUrl
                If parameters IsNot Nothing AndAlso parameters.Count > 0 Then
                    Dim queryBuilder As New StringBuilder()
                    For Each pair In parameters
                        queryBuilder.Append($"{Uri.EscapeDataString(pair.Key)}={Uri.EscapeDataString(pair.Value)}&")
                    Next
                    Dim query As String = queryBuilder.ToString().TrimEnd("&"c)
                    requestUrl &= If(requestUrl.Contains("?"), "&", "?") & query
                End If
    
                ' 发送GET请求并验证状态码
                Dim response As HttpResponseMessage = Await _httpClient.GetAsync(requestUrl)
                response.EnsureSuccessStatusCode()
    
                ' 读取响应并格式化JSON
                Dim responseJson As String = Await response.Content.ReadAsStringAsync()
                Return FormatJsonString(responseJson)
            Catch ex As HttpRequestException
                Throw New Exception($"GET请求失败:{ex.Message}", ex)
            End Try
        End Function
    
        ''' 
        ''' 发送POST请求(JSON格式请求体)
        ''' 
        ''' 请求体数据类型
        ''' 接口完整地址
        ''' 请求体数据(任意可序列化对象)
        ''' 格式化后的JSON响应字符串
        Public Shared Async Function SendPostJsonRequestAsync(Of T)(apiUrl As String, requestData As T) As Task(Of String)
            Try
                ' 将对象序列化为JSON字符串
                Dim jsonBody As String = JsonSerializer.Serialize(requestData, New JsonSerializerOptions With {.WriteIndented = False})
                ' 构造JSON请求体
                Dim content As New StringContent(jsonBody, Encoding.UTF8, "application/json")
    
                ' 发送POST请求并验证状态码
                Dim response As HttpResponseMessage = Await _httpClient.PostAsync(apiUrl, content)
                response.EnsureSuccessStatusCode()
    
                ' 读取响应并格式化JSON
                Dim responseJson As String = Await response.Content.ReadAsStringAsync()
                Return FormatJsonString(responseJson)
            Catch ex As HttpRequestException
                Throw New Exception($"POST请求失败:{ex.Message}", ex)
            End Try
        End Function
    
        ''' 
        ''' 添加全局请求头(如Token、API Key)
        ''' 
        ''' 请求头名称
        ''' 请求头值
        Public Shared Sub AddGlobalHeader(headerName As String, headerValue As String)
            If Not _httpClient.DefaultRequestHeaders.Contains(headerName) Then
                _httpClient.DefaultRequestHeaders.Add(headerName, headerValue)
            End If
        End Sub
    
        ''' 
        ''' 格式化JSON字符串,提升可读性
        ''' 
        ''' 原始JSON字符串
        ''' 格式化后的JSON
        Private Shared Function FormatJsonString(rawJson As String) As String
            If String.IsNullOrEmpty(rawJson) Then Return rawJson
            Dim jsonDoc As JsonDocument = JsonDocument.Parse(rawJson)
            Return JsonSerializer.Serialize(jsonDoc, New JsonSerializerOptions With {.WriteIndented = True})
        End Function
    End Class
    
    ''' 
    ''' 测试程序入口,演示GET/POST请求的使用
    ''' 
    Module Program
        ' VB.NET主函数,异步执行测试逻辑
        Sub Main()
            ' 同步等待异步方法执行(控制台程序专用)
            TestApiRequestsAsync().GetAwaiter().GetResult()
            ' 防止控制台立即关闭
            Console.WriteLine(vbCrLf & "按任意键退出程序...")
            Console.ReadKey()
        End Sub
    
        ''' 
        ''' 测试GET和POST API请求
        ''' 
        Private Async Function TestApiRequestsAsync() As Task
            Try
                ' 可选:添加全局请求头(如Token认证)
                ' HttpHelper.AddGlobalHeader("Authorization", "Bearer your_token_here")
                ' HttpHelper.AddGlobalHeader("X-API-Key", "your_api_key_here")
    
                ' ------------------- 测试GET请求 -------------------
                Console.WriteLine("=== 开始执行GET请求 ===")
                Dim getUrl As String = "https://api.example.com/user/list" ' 替换为实际接口地址
                Dim getParams As New Dictionary(Of String, String) From {
                    {"page", "1"},
                    {"size", "10"},
                    {"keyword", "vb.net_test"}
                }
                Dim getResponse As String = Await HttpHelper.SendGetRequestAsync(getUrl, getParams)
                Console.WriteLine("GET请求响应结果:" & vbCrLf & getResponse)
    
                Console.WriteLine("------------------------")
    
                ' ------------------- 测试POST请求 -------------------
                Console.WriteLine("=== 开始执行POST请求 ===")
                Dim postUrl As String = "https://api.example.com/user/login" ' 替换为实际接口地址
                ' 匿名类型请求体(也可替换为自定义实体类)
                Dim postData = New With {
                    .username = "vbnet_admin",
                    .password = "123456_test",
                    .rememberMe = True
                }
                Dim postResponse As String = Await HttpHelper.SendPostJsonRequestAsync(postUrl, postData)
                Console.WriteLine("POST请求响应结果:" & vbCrLf & postResponse)
    
            Catch ex As Exception
                Console.WriteLine($"请求异常:{ex.Message}")
                If ex.InnerException IsNot Nothing Then
                    Console.WriteLine($"内部异常详情:{ex.InnerException.Message}")
                End If
            End Try
        End Function
    End Module
    
    
    本工具支持 API 接口的实时请求测试,实时返回接口响应结果,助力开发者快速排查接口问题。
    ⚠️ 本工具为真实请求,将消耗额度 / 产生计费,请勿填写私密信息。
    ⚠️ 本页面工具将自动添加请求头,无需手动添加。
    请求参数
    参数名 参数值 操作

    用户反馈

    近期反馈0
    未登录

    登录 后反馈

    仅需三步即可快速接入

    1
    注册认证 · 获取密钥

    注册开发者账号并完成实名认证,在 控制台 申请专属API密钥(支持多种安全认证策略)。

    2
    接口调试 · 开发集成

    使用平台 在线调试工具 快速验证接口,通过官方API文档完成业务系统的接口集成与联调。

    3
    生产上线 · 监控运维

    在生产环境调用接口,然后在 个人中心 查看调用日志、平台提供弹性配额与故障排查支持。