一、解决办法
使用tls-client库,请求示例如下:
bash
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"time"
http "github.com/bogdanfinn/fhttp"
tls_client "github.com/bogdanfinn/tls-client"
"github.com/bogdanfinn/tls-client/profiles"
)
func main() {
url := "https://xxxxx.com/abc/ddd"
// 构造 JSON body
data := map[string]interface{}{
"aa": map[string]interface{}{},
"bb": map[string]interface{}{"we": 30, "ty": 0},
"aaaa": "",
}
jsonBytes, _ := json.Marshal(data)
// 创建 tls-client
client, err := tls_client.NewHttpClient(
tls_client.NewNoopLogger(),
tls_client.WithTimeoutSeconds(25),
tls_client.WithClientProfile(profiles.Okhttp4Android11),
tls_client.WithProxyUrl("http://127.0.0.1:7890"), // 代理按需保留
)
if err != nil {
panic(err)
}
// 创建请求
req, err := http.NewRequest("POST", url, bytes.NewReader(jsonBytes))
if err != nil {
panic(err)
}
// 设置必要头(保持简洁,便于排查)
req.Header = http.Header{}
req.Header.Add("Content-Type", "application/json; charset=utf-8")
start := time.Now()
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
b, _ := io.ReadAll(resp.Body)
fmt.Println("状态码:", resp.StatusCode)
fmt.Println("耗时:", time.Since(start))
fmt.Println("响应头:", resp.Header)
fmt.Println("响应体:", string(b))
}