package report import ( "encoding/json" "errors" "fmt" "io" "net/http" "proxy-server/edge/core" "proxy-server/edge/env" "strings" ) func Online() (id int32, host string, err error) { bytes, err := json.Marshal(map[string]any{ "name": env.Name, "version": core.Version, }) if err != nil { return 0, "", err } var body = strings.NewReader(string(bytes)) resp, err := http.Post(env.EndpointAssign, "application/json", body) if err != nil { return 0, "", fmt.Errorf("执行请求失败: %w", err) } defer func(Body io.ReadCloser) { _ = Body.Close() }(resp.Body) if resp.StatusCode != http.StatusOK { return 0, "", errors.New("状态码: " + resp.Status) } bytes, err = io.ReadAll(resp.Body) if err != nil { return 0, "", fmt.Errorf("读取响应失败: %w", err) } var respBody struct { Id int32 `json:"id"` Host string `json:"host"` } err = json.Unmarshal(bytes, &respBody) if err != nil { return 0, "", fmt.Errorf("解析响应失败: %w", err) } if respBody.Host == "" { return 0, "", errors.New("响应体为空") } return respBody.Id, respBody.Host, nil }