我正在嘗試通過 Go 客戶端對自己進行身份驗證。這是我到目前為止所做的func main() { servAddr := "192.168.7.13:443" tcpAddr, err := net.ResolveTCPAddr("tcp", servAddr) if err != nil { fmt.Println("ResolveTCPAddr failed:", err.Error()) os.Exit(1) } conn, err := net.DialTCP("tcp", nil, tcpAddr) if err != nil { fmt.Println("Dial failed:", err.Error()) os.Exit(1) } _, err = conn.Write([]byte(postReq)) if err != nil { fmt.Println("Write to server failed:", err.Error()) os.Exit(1) } fmt.Println(postReq) reply := make([]byte, 1024) _, err = conn.Read(reply) if err != nil { fmt.Println("Write to server failed:", err.Error()) os.Exit(1) } fmt.Println("reply from server=", string(reply)) conn.Close()}這是我正在寫給連接的消息:POST /ManagementServer/ServerCommandService.svc HTTP/1.1 主機:192.xxx.xx.xx 內容類型:文本/xml;charset=utf-8 授權:基本 {username:password in base64} Content-Length:405 SOAPAction:“ http://videoos.net/2/XProtectCSServerCommand/IServerCommandService/Login ” 連接:Keep-Alive 190fc316-6412-41c4- 8a9c-d468cc7bee9d在此之后,我希望獲得身份驗證令牌,但我卻得到了> Write to server failed: read tcp server-ip:port->server-ip:443:> read: connection reset by peer我究竟做錯了什么?僅供參考,我在 python 中使用相同的消息,并且通過套接字我可以獲得令牌。有人可以幫我在 Go 語言中做同樣的事情嗎?謝謝
1 回答

慕絲7291255
TA貢獻1859條經驗 獲得超6個贊
從事實來看,您的服務器使用 port?443
,我假設服務器需要 TLS 連接。要獲得這樣的連接,您可以使用tls.Dial
:
conn,?err?:=?tls.Dial("tcp",?servAddr,?nil)?//?servAddr?not?tcpAddr
此連接將處理 TLS 加密所需的基礎步驟,例如 TLS 握手,并允許您Write
發送要發送的字節,而不必自己進行加密。
正如您提到的證書驗證錯誤,使用
conn,?err?:=?tls.Dial("tcp",?servAddr,?&tls.Config{InsecureSkipVerify:?true})
將禁用此驗證。請注意,這會刪除 TLS 提供的大部分安全性。
請注意,我建議您使用它net/http
來發送簡單的 HTTP 請求。要在此處禁用證書驗證,您可以使用
http.DefaultTransport.(*http.Transport).TLSClientConfig?=?&tls.Config{InsecureSkipVerify:?true}
但同樣要注意,這會消除 TLS 提供的大部分安全性。
- 1 回答
- 0 關注
- 184 瀏覽
添加回答
舉報
0/150
提交
取消