Get 請求
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
response, err := http.Get("http://www.baidu.com")
if err != nil {
// handle error
}
//程序在使用完回復后必須關閉回復的主體。
defer response.Body.Close()
body, _ := ioutil.ReadAll(response.Body)
fmt.Println(string(body))
}
// Golang HTTP GET 添加請求參數
func GetAddQuery(){
req, err := http.NewRequest("GET", "http://api.themoviedb.org/3/tv/popular", nil)
if err != nil {
log.Print(err)
os.Exit(1)
}
q := req.URL.Query()
q.Add("api_key", "key_from_environment_or_flag")
q.Add("another_thing", "foo & bar")
req.URL.RawQuery = q.Encode()
fmt.Println(req.URL.String())
// Output:
// http://api.themoviedb.org/3/tv/popular?another_thing=foo+%26+bar&api_key=key_from_environment_or_flag
var resp *http.Response
resp, err = http.DefaultClient.Do(req)
if err != nil {
log.Print(err)
}
defer resp.Body.Close()
}
POST 請求
package main
import (
"fmt"
"io/ioutil"
"net/http"
"bytes"
)
func main() {
body := "{\"action\":20}"
res, err := http.Post("http://xxx.com", "application/json;charset=utf-8", bytes.NewBuffer([]byte(body)))
if err != nil {
fmt.Println("Fatal error ", err.Error())
}
defer res.Body.Close()
content, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println("Fatal error ", err.Error())
}
fmt.Println(string(content))
}
http.Client和http.NewRequest來模擬請求
package main
import (
"fmt"
"io/ioutil"
"net/http"
"net/url"
"strings"
)
func main() {
v := url.Values{}
v.Set("username", "xxxx")
v.Set("password", "xxxx")
//利用指定的method,url以及可選的body返回一個新的請求.如果body參數實現了io.Closer接口,Request返回值的Body 字段會被設置為body,並會被Client類型的Do、Post和PostFOrm方法以及Transport.RoundTrip方法關閉。
body := ioutil.NopCloser(strings.NewReader(v.Encode())) //把form數據編下碼
client := &http.Client{}//客戶端,被Get,Head以及Post使用
reqest, err := http.NewRequest("POST", "http://xxx.com/logindo", body)
if err != nil {
fmt.Println("Fatal error ", err.Error())
}
//給一個key設定為響應的value.
reqest.Header.Set("Content-Type", "application/x-www-form-urlencoded;param=value") //必須設定該參數,POST參數才能正常提交
resp, err := client.Do(reqest)//發送請求
defer resp.Body.Close()//一定要關閉resp.Body
content, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Fatal error ", err.Error())
}
fmt.Println(string(content))
}
復雜請求,頭參數,cookie 之類
func httpDo() {
client := &http.Client{}
req, err := http.NewRequest("POST", "http://www.01happy.com/demo/accept.php", strings.NewReader("name=cjb"))
if err != nil {
// handle error
}
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.Header.Set("Cookie", "name=anny")
resp, err := client.Do(req)
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
// handle error
}
fmt.Println(string(body))
}