我正在尝试在 Go 中发出一个简单的 HTTP 请求,在直接按照指南操作后,我不断收到相同的错误:
local error: tls: no renegotiation
我不太明白如何解释这个?我知道这不是服务器上的问题,因为当我从 python 调用相同的请求时,它返回正常。这是我的代码:
package main
import (
"fmt"
"net/http"
"net/url"
"strings"
"time"
)
func main() {
timeout := time.Duration(20 * time.Second)
client := &http.Client{
Timeout: timeout,
}
data := url.Values{
"top": {"10"},
"lDate": {"2019-01-01"},
}
req, err := http.NewRequest("POST", "https://api.*********.com/AppAvailLoads?", strings.NewReader(data.Encode()))
if err != nil {
fmt.Println("Error in construction")
}
req.Header.Add("x-cdata-authtoken", "********")
req.Header.Add("content-type", "application/x-www-form-urlencoded")
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error in request")
fmt.Println(err)
} else {
fmt.Println(resp.Body)
resp.Body.Close()
}
}
Run Code Online (Sandbox Code Playgroud)
解决方案是启用 TLS 重新协商(去图,我知道),这是一个常量,它是 tls 包的一部分,如下所示:
tr := &http.Transport{
TLSClientConfig: &tls.Config{
Renegotiation: tls.RenegotiateOnceAsClient,
InsecureSkipVerify: true},
}
client := &http.Client{
Timeout: timeout,
Transport: tr,
}
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为没有在线指南解释这一点或显示诸如此类的常见错误如何local error: tls: no renegotiation发生的示例。我希望这对来自其他语言的人有用,因为这不是人们通常处理的事情!
| 归档时间: |
|
| 查看次数: |
2941 次 |
| 最近记录: |