func main() {
if soap, err := gosoap.SoapClient("https://domain:port/path?WSDL"); err != nil {
fmt.Println(err)
return
} else {
params := gosoap.Params{
"param1": "abc",
"param2": "def",
"param3": "123",
}
if res, err := soap.Call("MethodName", params); err != nil {
fmt.Println(err)
return
} else {
fmt.Println(res)
return
}
}
}
Get https://domain:port/path?WSDL: x509: certificate signed by unknown authority
正如Berkant comment所说,“这意味着运行应用程序的已安装CA无法确认证书”。
最好的方法是检查主机的证书是否有效并且配置正确。如果您的主机使用您自己的证书,最好是将其添加到您的系统/环境的已知证书中。你也可以把它添加到golang本身,或者忽略它。
要将您自己的证书添加到golang,请参阅以下答案:
如何用证书golang发送https请求
然后像下面这样设置客户端:
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}
}
问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 假设Adwords是Google的事物,而Go是Google的事物,那么用Go编写的Adwords API版本需要多长时间? 与此问题相关的另一个问题是:是否
问题内容: 由于Java不支持指针,如何像在C和C ++中那样通过Java引用来调用函数? 问题答案: 在Java中,真正的按引用传递是不可能的。Java通过值传递所有内容,包括引用。但是您可以使用容器对象来模拟它。 使用以下任何一个作为方法参数: 数组 集合 AtomicXYZ类 并且,如果您在方法中更改其内容,则更改的内容将可用于调用上下文。 糟糕,您的意思显然是通过引用调用方法。在Java中
我有一个使用WebFlux和REST API的反应性Spring应用程序。每当用户调用我的API,我都需要调用一个公开WSDL的SOAP服务,执行一些操作并返回结果。 如何将对SOAP服务的调用与反应性WebFlux框架结合起来? 在我看来,我可以用两种不同的方式来做: 使用WebFlux的WebClient构造并发送SOAP消息。 在Mono/flux中使用WebServiceGatewaySu
问题内容: 通过AJAX从标准HTTP页面调用HTTPS页面(例如信用卡授权服务,例如WorldPay)是否会有问题? 我无法想象为什么会有问题,响应将是HTML页面,然后我可以将其嵌入结果窗格或类似的页面? 问题答案: 是的,这将是跨域发布,并且将被浏览器阻止。
我遇到了使用客户端存根通过https发送soap请求的问题。我正在运行Ubuntu16并使用Eclipse。Ive使用KeyTool在中添加了证书。 如有任何帮助,我们将不胜感激。
问题内容: 我看了以下链接,但似乎没有什么具体的。 Android中的Secure HTTPPost 此功能不再起作用,我已经对其进行了测试,并且有其他人评论说它不起作用。 我也检查了一下:DefaultHttpClient,证书,Https和发布问题!这似乎可行,但Blogger只是让您感到困惑。更多分步说明会有所帮助。我未能通过他的第二步,因此设法获得了证书。 http://www.makeu