Go使用net/http庫傳送GET請求

ConnorK發表於2021-03-24

簡單的GET請求

func Test1() {
    // 傳送請求
    resp, err := http.Get("http://localhost:8080/test")
    if err != nil {
        log.Fatal(err)
    }
    // 讀取返回結果
    body, _ := ioutil.ReadAll(resp.Body)
    var data interface{}
    // 序列化返回結果
    json.Unmarshal(body, &data)

    fmt.Println(data)
}

帶引數的GET請求

func Test2() {
    req, err := http.NewRequest("GET", "http://localhost:8080/test", nil)
    if err != nil {
        log.Fatal(err)
    }

    // 設定引數
    params := req.URL.Query()
    params.Add("action", "get")
    params.Add("page", "2")

    req.URL.RawQuery = params.Encode()
    resp, _ := http.DefaultClient.Do(req)
    body, _ := ioutil.ReadAll(resp.Body)
    var data interface{}
    json.Unmarshal(body, &data)

    fmt.Println(data)
}

設定超時時間的GET請求

func Test3() {
    req, err := http.NewRequest("GET", "http://localhost:8080/test", nil)
    if err != nil {
        log.Fatal(err)
    }

    // 設定 timeout 為5s
    var t int64 = 5
    ctx, _ := context.WithTimeout(context.Background(), time.Duration(t) * time.Second)

    // 設定引數
    params := req.URL.Query()
    params.Add("action", "get")
    params.Add("page", "2")

    req.URL.RawQuery = params.Encode()
    resp, _ := http.DefaultClient.Do(req.WithContext(ctx))
    body, _ := ioutil.ReadAll(resp.Body)
    var data interface{}
    json.Unmarshal(body, &data)

    fmt.Println(data)
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章