GET 请求
get请求可以直接使用
http.Get 方法
简单
func main(){
resp,err := http.Get("https://baidu.com")
if err != nil {
panic(err)
}
defer resp.Body.Close()
s,err:=ioutil.ReadAll(resp.Body)
fmt.Printf(string(s))
}
复杂
func main() {
params := url.Values{}
Url,err := url.Parse("http://baidu.com?fd=fdsf")
if err != nil {
panic(err.Error())
}
params.Set("a","fdfds")
params.Set("id",string("1"))
//如果参数中有中文参数,这个方法会进行URLEncode
Url.RawQuery = params.Encode()
urlPath := Url.String()
resp,err := http.Get(urlPath)
defer resp.Body.Close()
s,err := ioutil.ReadAll(resp.Body)
fmt.Println(string(s))
}
这个params.set 是不是感觉跟php里的http_build_query ,自己感觉哈
POST 请求
使用
http.post
type Server struct {
ServerName string
ServerIp string
}
type ServerSlice struct {
Server []Server
ServersID string
}
func main() {
//post 第三个参数是io.reader interface
//strings.NewReader byte.NewReader bytes.NewBuffer 实现了read 方法
s := ServerSlice{ServersID: "tearm",Server: []Server{{"beijing","127.0.0.1"},{"shanghai","127.0.0.1"}}}
b,_ := json.Marshal(s)
fmt.Println(string(b))
resp,_ := http.Post("http://baidu.com","application/x-www-form-urlencoded",strings.NewReader("heel="+string(b)))
//
defer resp.Body.Close()
//io.Reader
body,_ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
使用
http.PostForm
func httpPostForm() {
// params:=url.Values{}
// params.Set("hello","fdsfs") //这两种都可以
params= url.Values{"key": {"Value"},"id": {"123"}}
resp,_:= http.PostForm("http://baidu.com",body)
defer resp.Body.Close()
body,_:= ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
如果需要设置头参数,cookie之类的数据,就可以使用http.Do
func httpDo() {
client := &http.Client{}
req,err := http.NewRequest("POST","baidu.com",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))
}
同样的http.NewRequest 第三个参数只需要实现io.reader 接口就行 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|