3
回答
golang怎么调用webservice地址如http://xxx.xxx.com/xxx?wsdl
刚接触go不久,对go怎么调用外部的webservice有点疑问,请问该怎么调或者给个实例我自己看,谢谢了。
Go
举报
曾天奇
发帖于4年前 3回/6K+阅
共有3个答案 最后回答: 4年前


废话不多说,直接上代码。

package main

import (
	"errors"
	"fmt"
	"io/ioutil"
	"net/http"
	"net/url"
)

const (
	Host = "http://ip.taobao.com"
	Addr = Host + "/service/getIpInfo.php?"
)

func taobao(ip string) (string, error) {
	values := url.Values{}
	values.Add("ip", ip)

	// client
	url := Addr + values.Encode()
	resp, err := http.Get(url)
	if err != nil {
		return "", err
	}

	if resp != nil && resp.Body != nil {
		defer resp.Body.Close()
	}

	if resp.StatusCode != http.StatusOK {
		return "", errors.New(resp.Status)
	}

	data, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return "", err
	}

	return string(data), nil
}

func main() {
	data, err := taobao("220.181.111.86")
	if err != nil {
		panic(err)
	}

	fmt.Println(data)
}




--- 共有 1 条评论 ---
曾天奇谢谢您的回复,我也是这么做的,只是,后来问题成了怎么根据wsdl知道需要传入的xml了~~不过最后还是被我用抓包工具把这个wsdl的传入xml给抓出来了。总的来说,谢谢你的回答。 4年前 回复

要是webservice有输入参数怎么办?比如其提供了一个int Add(int, int)的做加法函数,怎么调用???

//1.取得必要参数
//取得requestXML
requestXml := beego.AppConfig.String("requestXML")
//填充参数到requestXML
request := fmt.Sprintf(requestXml, userNo, groupId, inputValue, types)
//取得wsdl地址
wsdl := beego.AppConfig.String("wsdl")

//2.调用webservice
//调用webservice地址,取得合同信息xml
client := new(http.Client)
resp, err := client.Post(wsdl, "text/xml; charset=utf-8", bytes.NewBufferString(request))


顶部