1. 程式人生 > >【Go】原生http get和post請求框架

【Go】原生http get和post請求框架

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
}