Seperti komentar Berkant, "ini berarti CA yang diinstal tempat aplikasi Anda berjalan tidak dapat mengonfirmasi sertifikat".
Yang terbaik adalah memeriksa apakah sertifikat host Anda valid dan dikonfigurasi dengan benar. Jika host Anda menggunakan sertifikat Anda sendiri, cara terbaik adalah menambahkannya ke sertifikat pengetahuan sistem/lingkungan Anda. Anda juga dapat menambahkannya ke golang itu sendiri, atau mengabaikannya.
Untuk menambahkan sertifikat Anda sendiri ke golang, lihat jawaban ini:
https://stackoverflow.com/questions/38822764/how-to-send-a-https-request-with-a-certificate-golang/38825553#38825553
Kemudian atur klien seperti di bawah ini:
Untuk mengabaikannya, gosoap.Client memiliki bidang Klien yang memungkinkan set http.Client, tetapi hanya setelah memanggil gosoap.SoapClient, jadi Anda perlu meniru gosoap.SoapClient:
func SoapClient(wsdl string) (*gosoap.Client, error) {
_, err := url.Parse(wsdl)
if err != nil {
return nil, err
}
tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify : true},
}
//client := &http.Client{Transport: tr}//1: if you wanna add only soap headers
client := &http.Client{Transport: NewAddHeaderTransport(tr)}//1: if you wanna add http headers
//2: if you wann add soap headers, soap.Client has HeaderName and HeaderParams field
soapClient := &gosoap.Client{
HttpClient: client,
WSDL: wsdl,
URL: strings.TrimSuffix(d.TargetNamespace, "/"),
}
err := getWsdlDefinitions(wsdl, &soapClient.Definitions, client)
if err != nil {
return nil, err
}
return soapClient, nil
}
//we use interface{} since gosoap.wsdlDefinitions is unexported
func getWsdlDefinitions(u string, wsdl interface{}, client *http.Client) (err error) {
r, err := client.Get(u)
if err != nil {
return err
}
defer r.Body.Close()
decoder := xml.NewDecoder(r.Body)
decoder.CharsetReader = charset.NewReaderLabel
return decoder.Decode(wsdl)
}
type AddHeaderTransport struct {
T http.RoundTripper
}
func (adt *AddHeaderTransport) RoundTrip(req *http.Request) (*http.Response, error) {
req.Header.Add("Your-Header", "your header value")
return adt.T.RoundTrip(req)
}
func NewAddHeaderTransport(T http.RoundTripper) *AddHeaderTransport {
if T == nil {
T = http.DefaultTransport
}
return &AddHeaderTransport{T}
}
person
gstvg
schedule
07.05.2020