This commit is contained in:
Hua
2025-02-18 16:53:34 +08:00
parent 8b4b4b4181
commit 5cfdc92556
21 changed files with 3139 additions and 0 deletions

View File

@ -0,0 +1,174 @@
package platforms
import (
"bytes"
"encoding/json"
"fmt"
"io"
"log"
"net/http"
)
type httpClient struct {
url string
token string
client *http.Client
}
func newHTTPClient(baseURL, token string) *httpClient {
return &httpClient{
url: baseURL,
token: token,
client: &http.Client{},
}
}
func (c *httpClient) get(path string, result interface{}) error {
url := fmt.Sprintf("%s%s", c.url, path)
log.Printf("发送 GET 请求: url=%s", url)
req, err := http.NewRequest("GET", url, nil)
if err != nil {
log.Printf("创建 GET 请求失败: url=%s, error=%v", url, err)
return fmt.Errorf("创建请求失败: %w", err)
}
req.Header.Set("Content-Type", "application/json")
if c.token != "" {
req.Header.Set("Authorization", "token "+c.token)
}
resp, err := c.client.Do(req)
if err != nil {
log.Printf("发送 GET 请求失败: url=%s, error=%v", url, err)
return fmt.Errorf("发送请求失败: %w", err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
body, _ := io.ReadAll(resp.Body)
log.Printf("GET 请求返回错误状态码: url=%s, status=%d, response=%s", url, resp.StatusCode, string(body))
return fmt.Errorf("请求失败,状态码: %d响应: %s", resp.StatusCode, string(body))
}
if err := json.NewDecoder(resp.Body).Decode(result); err != nil {
log.Printf("解析 GET 响应失败: url=%s, error=%v", url, err)
return fmt.Errorf("解析响应失败: %w", err)
}
log.Printf("GET 请求成功: url=%s", url)
return nil
}
func (c *httpClient) post(path string, data interface{}) error {
url := fmt.Sprintf("%s%s", c.url, path)
log.Printf("发送 POST 请求: url=%s", url)
jsonData, err := json.Marshal(data)
if err != nil {
log.Printf("序列化 POST 数据失败: url=%s, error=%v", url, err)
return fmt.Errorf("序列化请求数据失败: %w", err)
}
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
if err != nil {
log.Printf("创建 POST 请求失败: url=%s, error=%v", url, err)
return fmt.Errorf("创建请求失败: %w", err)
}
req.Header.Set("Content-Type", "application/json")
if c.token != "" {
req.Header.Set("Authorization", "token "+c.token)
}
resp, err := c.client.Do(req)
if err != nil {
log.Printf("发送 POST 请求失败: url=%s, error=%v", url, err)
return fmt.Errorf("发送请求失败: %w", err)
}
defer resp.Body.Close()
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
body, _ := io.ReadAll(resp.Body)
log.Printf("POST 请求返回错误状态码: url=%s, status=%d, response=%s", url, resp.StatusCode, string(body))
return fmt.Errorf("请求失败,状态码: %d响应: %s", resp.StatusCode, string(body))
}
log.Printf("POST 请求成功: url=%s", url)
return nil
}
func (c *httpClient) getWithHeaders(path string, result interface{}, headers map[string]string) error {
url := fmt.Sprintf("%s%s", c.url, path)
log.Printf("发送 GET 请求: url=%s", url)
req, err := http.NewRequest("GET", url, nil)
if err != nil {
log.Printf("创建 GET 请求失败: url=%s, error=%v", url, err)
return fmt.Errorf("创建请求失败: %w", err)
}
req.Header.Set("Content-Type", "application/json")
for key, value := range headers {
req.Header.Set(key, value)
}
resp, err := c.client.Do(req)
if err != nil {
log.Printf("发送 GET 请求失败: url=%s, error=%v", url, err)
return fmt.Errorf("发送请求失败: %w", err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
body, _ := io.ReadAll(resp.Body)
log.Printf("GET 请求返回错误状态码: url=%s, status=%d, response=%s", url, resp.StatusCode, string(body))
return fmt.Errorf("请求失败,状态码: %d响应: %s", resp.StatusCode, string(body))
}
if err := json.NewDecoder(resp.Body).Decode(result); err != nil {
log.Printf("解析 GET 响应失败: url=%s, error=%v", url, err)
return fmt.Errorf("解析响应失败: %w", err)
}
log.Printf("GET 请求成功: url=%s", url)
return nil
}
func (c *httpClient) postWithHeaders(path string, data interface{}, headers map[string]string) error {
url := fmt.Sprintf("%s%s", c.url, path)
log.Printf("发送 POST 请求: url=%s", url)
jsonData, err := json.Marshal(data)
if err != nil {
log.Printf("序列化 POST 数据失败: url=%s, error=%v", url, err)
return fmt.Errorf("序列化请求数据失败: %w", err)
}
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
if err != nil {
log.Printf("创建 POST 请求失败: url=%s, error=%v", url, err)
return fmt.Errorf("创建请求失败: %w", err)
}
req.Header.Set("Content-Type", "application/json")
for key, value := range headers {
req.Header.Set(key, value)
}
resp, err := c.client.Do(req)
if err != nil {
log.Printf("发送 POST 请求失败: url=%s, error=%v", url, err)
return fmt.Errorf("发送请求失败: %w", err)
}
defer resp.Body.Close()
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
body, _ := io.ReadAll(resp.Body)
log.Printf("POST 请求返回错误状态码: url=%s, status=%d, response=%s", url, resp.StatusCode, string(body))
return fmt.Errorf("请求失败,状态码: %d响应: %s", resp.StatusCode, string(body))
}
log.Printf("POST 请求成功: url=%s", url)
return nil
}