【Go】原生http get和post請求框架
阿新 • • 發佈:2019-02-03
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
}