package obix import ( "city_chips/internal/model" "crypto/tls" "encoding/base64" "encoding/xml" "fmt" "io" "net/http" "net/url" "strconv" ) // SendSecureRequest 发送 GET 请求到指定 URL,使用用户名和密码构造认证 Header func SendSecureRequest(fullURL, username, password string) (string, error) { // 创建不验证证书的 HTTP Client client := &http.Client{ Transport: &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, }, } // 创建请求 req, err := http.NewRequest("GET", fullURL, nil) if err != nil { return "", fmt.Errorf("failed to create request: %w", err) } // 构造 Authorization 头(Basic Auth) auth := username + ":" + password req.Header.Add("Authorization", "Basic "+base64.StdEncoding.EncodeToString([]byte(auth))) // 构造 Cookie 中的 niagara_origin_uri 参数(包含认证信息) encodedUser := url.QueryEscape(username) encodedPass := url.QueryEscape(password) originURI := req.URL.Path + "?Username=" + encodedUser + "&Password=" + encodedPass req.Header.Add("Cookie", "JSESSIONID=6ee85d04496e56251021fff41d3a690a53bb09f3524d5828e5.node0; niagara_origin_uri="+originURI) // 发送请求 res, err := client.Do(req) if err != nil { return "", fmt.Errorf("request failed: %w", err) } defer res.Body.Close() // 读取响应体 body, err := io.ReadAll(res.Body) if err != nil { return "", fmt.Errorf("failed to read response body: %w", err) } return string(body), nil } func ParseTemperatureFromXML(xmlData []byte) (*model.RealPoint, error) { var realPoint model.RealPoint err := xml.Unmarshal(xmlData, &realPoint) if err != nil { return nil, fmt.Errorf("failed to unmarshal XML: %w", err) } return &realPoint, nil } func DetectType(s string) interface{} { // 1. 尝试转为整数 if i, err := strconv.Atoi(s); err == nil { return i } // 2. 尝试转为浮点数 if f, err := strconv.ParseFloat(s, 64); err == nil { return f } // 3. 尝试转为布尔值 if b, err := strconv.ParseBool(s); err == nil { return b } // 4. 如果都不是,则返回原字符串 return s }