package main import ( "bytes" "encoding/json" "fmt" "io/ioutil" "net/http" "time" ) // 这里使用通用的map类型表示请求和响应,避免与main.go中的结构体冲突 func main() { // 服务器地址 serverURL := "http://localhost:8080" // 1. 测试健康检查 testHealthCheck(serverURL) // 2. 测试获取当前时间(默认格式) testGetCurrentTime(serverURL, "") // 3. 测试获取当前时间(自定义格式) testGetCurrentTime(serverURL, "2006-01-02 15:04:05") // 4. 测试订阅时间流 testSubscribeTimeStream(serverURL) } // 测试健康检查 func testHealthCheck(serverURL string) { url := fmt.Sprintf("%s/health", serverURL) resp, err := http.Get(url) if err != nil { fmt.Printf("健康检查请求失败: %v\n", err) return } defer resp.Body.Close() if resp.StatusCode == http.StatusOK { fmt.Println("✅ 健康检查成功: 服务器正常运行") } else { fmt.Printf("❌ 健康检查失败: 状态码 %d\n", resp.StatusCode) } } // 测试获取当前时间 func testGetCurrentTime(serverURL string, format string) { url := fmt.Sprintf("%s/mcp/v1/submit", serverURL) // 构建请求体 requestBody := map[string]interface{}{ "data": map[string]interface{}{}, "type": "get_current_time", "timestamp": time.Now().Unix(), } // 添加格式参数(如果提供) if format != "" { data := requestBody["data"].(map[string]interface{}) data["format"] = format } // 序列化请求体 jsonData, err := json.Marshal(requestBody) if err != nil { fmt.Printf("序列化请求体失败: %v\n", err) return } // 发送POST请求 resp, err := http.Post(url, "application/json", bytes.NewBuffer(jsonData)) if err != nil { fmt.Printf("发送请求失败: %v\n", err) return } defer resp.Body.Close() // 读取响应 body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Printf("读取响应失败: %v\n", err) return } // 解析响应为map var response map[string]interface{} if err := json.Unmarshal(body, &response); err != nil { fmt.Printf("解析响应失败: %v\n", err) return } // 检查响应状态 success, ok := response["success"].(bool) if !ok || !success { message := "未知错误" if msg, ok := response["message"].(string); ok { message = msg } fmt.Printf("❌ 获取当前时间失败: %s\n", message) return } // 提取数据 data, ok := response["data"].(map[string]interface{}) if !ok { fmt.Println("❌ 响应数据格式错误") return } // 获取时间信息 currentTime, _ := data["current_time"].(string) timestamp, _ := data["timestamp"].(float64) fmt.Printf("✅ 获取当前时间成功 (格式: %s):\n", format) fmt.Printf(" 时间: %s\n", currentTime) fmt.Printf(" 时间戳: %.0f\n", timestamp) } // 测试订阅时间流 func testSubscribeTimeStream(serverURL string) { url := fmt.Sprintf("%s/mcp/v1/submit", serverURL) // 构建请求体 requestBody := map[string]interface{}{ "data": map[string]interface{}{ "interval": 2, // 每2秒更新一次 "format": "2006-01-02 15:04:05", }, "type": "subscribe_time_stream", "timestamp": time.Now().Unix(), } // 序列化请求体 jsonData, err := json.Marshal(requestBody) if err != nil { fmt.Printf("序列化请求体失败: %v\n", err) return } // 发送POST请求 resp, err := http.Post(url, "application/json", bytes.NewBuffer(jsonData)) if err != nil { fmt.Printf("发送请求失败: %v\n", err) return } defer resp.Body.Close() // 读取响应 body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Printf("读取响应失败: %v\n", err) return } // 解析响应为map var response map[string]interface{} if err := json.Unmarshal(body, &response); err != nil { fmt.Printf("解析响应失败: %v\n", err) return } // 检查响应状态 success, ok := response["success"].(bool) if !ok || !success { message := "未知错误" if msg, ok := response["message"].(string); ok { message = msg } fmt.Printf("❌ 订阅时间流失败: %s\n", message) return } // 提取数据 data, ok := response["data"].(map[string]interface{}) if !ok { fmt.Println("❌ 响应数据格式错误") return } // 获取流信息 streamID, _ := data["stream_id"].(string) sseURL, _ := data["sse_url"].(string) interval, _ := data["interval"].(float64) fmt.Printf("✅ 订阅时间流成功:\n") fmt.Printf(" 流ID: %s\n", streamID) fmt.Printf(" SSE URL: %s\n", sseURL) fmt.Printf(" 更新间隔: %.0f秒\n", interval) fmt.Println(" 提示: 可以使用curl或浏览器访问SSE URL来接收实时时间更新") }