Go语言实现客户端client角色,向其他地址发送Get/Post请求,并获取数据(json格式)
头文件引用
import(
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
Get请求
func Http_Get(appid, appsecret string) (string, error) {
//发送请求
resp, err := http.Get("http://www.kuaidi100.com/query?type=yuantong&postid=11111111111")
if err != nil || resp.StatusCode != http.StatusOK {
fmt.Println("错误:发送请求", err)
return nil, err
}
//接收到返回数据
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body) //此处可增加输入过滤
if err != nil {
fmt.Println("错误:读取body", err)
return nil, err
}
//解析返回数据
if bytes.Contains(body, []byte("access_token")) {
atr := AccessTokenResponse{}
err = json.Unmarshal(body, &atr)
if err != nil {
fmt.Println("错误:解析json错误", err)
return nil, err
}
return &atr, nil
} else {
ater := AccessTokenErrorResponse{}
err = json.Unmarshal(body, &ater)
fmt.Printf("错误:接收到错误返回 %+v\n", ater)
if err != nil {
return nil, err
}
return nil, fmt.Errorf("%s", ater.Errmsg)
}
}
POST请求
func Http_Post() error {
//post的body内容,当前为json格式
reqbody := `
{
"touser":"OPENID",
"msgtype":"text",
"text":
{
"content":"THECONTENT"
}
}
`
//创建请求
postReq, err := http.NewRequest("POST",
"http://baidu.com", //post链接
strings.NewReader(reqbody)) //post内容
if err != nil {
fmt.Println("POST请求:创建请求失败", err)
return err
}
//增加header
postReq.Header.Set("Content-Type", "application/json; encoding=utf-8")
//执行请求
client := &http.Client{}
resp, err := client.Do(postReq)
if err != nil {
fmt.Println("POST请求:创建请求失败", err)
return err
} else {
//读取响应
body, err := ioutil.ReadAll(resp.Body) //此处可增加输入过滤
if err != nil {
fmt.Println("POST请求:读取body失败", err)
return err
}
fmt.Println("POST请求:创建成功", string(body))
}
defer resp.Body.Close()
return nil
}