版本封存
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"cmii-uav-watchdog-common/models"
|
||||
@@ -23,7 +24,8 @@ var (
|
||||
)
|
||||
|
||||
const (
|
||||
DefaultHeartbeatURL = "http://cmii-uav-watchdog/heartbeat"
|
||||
DefaultHeartbeatURL = "http://cmii-uav-watchdog:8080/api/heartbeat"
|
||||
// DefaultHeartbeatURL = "http://192.168.35.70:8990/api/heartbeat"
|
||||
)
|
||||
|
||||
// ClientOptions HTTP客户端配置选项
|
||||
@@ -48,8 +50,9 @@ func DefaultClientOptions() *ClientOptions {
|
||||
|
||||
// Client HTTP客户端封装
|
||||
type Client struct {
|
||||
httpClient *http.Client
|
||||
options *ClientOptions
|
||||
httpClient *http.Client
|
||||
options *ClientOptions
|
||||
heartbeatURL string // 心跳请求的URL地址
|
||||
}
|
||||
|
||||
// NewClient 创建一个新的HTTP客户端
|
||||
@@ -58,7 +61,7 @@ type Client struct {
|
||||
//
|
||||
// 返回:
|
||||
// - *Client: HTTP客户端实例
|
||||
func NewClient(options *ClientOptions) *Client {
|
||||
func NewClient(options *ClientOptions, heartbeatURL string) *Client {
|
||||
if options == nil {
|
||||
options = DefaultClientOptions()
|
||||
}
|
||||
@@ -75,10 +78,22 @@ func NewClient(options *ClientOptions) *Client {
|
||||
Transport: transport,
|
||||
}
|
||||
|
||||
return &Client{
|
||||
httpClient: httpClient,
|
||||
options: options,
|
||||
// 解析heartbeatURL
|
||||
heartbeatURL = strings.TrimSpace(heartbeatURL)
|
||||
if heartbeatURL == "" {
|
||||
heartbeatURL = DefaultHeartbeatURL
|
||||
}
|
||||
|
||||
return &Client{
|
||||
httpClient: httpClient,
|
||||
options: options,
|
||||
heartbeatURL: heartbeatURL,
|
||||
}
|
||||
}
|
||||
|
||||
// GetHeartbeatURL 获取心跳请求的URL地址
|
||||
func (c *Client) GetHeartbeatURL() string {
|
||||
return c.heartbeatURL
|
||||
}
|
||||
|
||||
// SendHeartbeat 发送心跳请求并处理响应
|
||||
@@ -114,7 +129,7 @@ func (c *Client) SendHeartbeat(ctx context.Context, request *models.HeartbeatReq
|
||||
}
|
||||
|
||||
// 创建HTTP请求
|
||||
req, err := http.NewRequestWithContext(ctx, http.MethodPost, DefaultHeartbeatURL, bytes.NewBuffer(requestBody))
|
||||
req, err := http.NewRequestWithContext(ctx, http.MethodPost, c.heartbeatURL, bytes.NewBuffer(requestBody))
|
||||
if err != nil {
|
||||
lastError = fmt.Errorf("创建请求失败: %w", err)
|
||||
continue
|
||||
@@ -140,9 +155,37 @@ func (c *Client) SendHeartbeat(ctx context.Context, request *models.HeartbeatReq
|
||||
// 确保响应体被关闭
|
||||
defer resp.Body.Close()
|
||||
|
||||
// 检查HTTP状态码
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
lastError = fmt.Errorf("%w: 状态码 %d", ErrInvalidStatusCode, resp.StatusCode)
|
||||
// 使用switch检查HTTP状态码
|
||||
switch resp.StatusCode {
|
||||
case http.StatusOK:
|
||||
// 状态码为200,继续处理响应
|
||||
case http.StatusBadRequest:
|
||||
lastError = fmt.Errorf("%w: 状态码 %d,请求无效", ErrInvalidStatusCode, resp.StatusCode)
|
||||
// 读取并丢弃响应体,避免连接泄漏
|
||||
_, _ = io.Copy(io.Discard, resp.Body)
|
||||
continue
|
||||
case http.StatusUnauthorized:
|
||||
lastError = fmt.Errorf("%w: 状态码 %d,未授权", ErrInvalidStatusCode, resp.StatusCode)
|
||||
// 读取并丢弃响应体,避免连接泄漏
|
||||
_, _ = io.Copy(io.Discard, resp.Body)
|
||||
continue
|
||||
case http.StatusForbidden:
|
||||
lastError = fmt.Errorf("%w: 状态码 %d,禁止访问", ErrInvalidStatusCode, resp.StatusCode)
|
||||
// 读取并丢弃响应体,避免连接泄漏
|
||||
_, _ = io.Copy(io.Discard, resp.Body)
|
||||
continue
|
||||
case http.StatusNotFound:
|
||||
lastError = fmt.Errorf("%w: 状态码 %d,未找到资源", ErrInvalidStatusCode, resp.StatusCode)
|
||||
// 读取并丢弃响应体,避免连接泄漏
|
||||
_, _ = io.Copy(io.Discard, resp.Body)
|
||||
continue
|
||||
case http.StatusInternalServerError:
|
||||
lastError = fmt.Errorf("%w: 状态码 %d,服务器内部错误", ErrInvalidStatusCode, resp.StatusCode)
|
||||
// 读取并丢弃响应体,避免连接泄漏
|
||||
_, _ = io.Copy(io.Discard, resp.Body)
|
||||
continue
|
||||
default:
|
||||
lastError = fmt.Errorf("%w: 状态码 %d,未知错误", ErrInvalidStatusCode, resp.StatusCode)
|
||||
// 读取并丢弃响应体,避免连接泄漏
|
||||
_, _ = io.Copy(io.Discard, resp.Body)
|
||||
continue
|
||||
|
||||
Reference in New Issue
Block a user