Go语言-基本的http请求操作详解编程语言

Go发起GET请求

基本的GET请求

//基本的GET请求 
package main 
 
import ( 
    "fmt" 
    "io/ioutil" 
    "net/http" 
) 
 
func main() { 
    resp, err := http.Get("http://www.hao123.com") 
    if err != nil { 
        fmt.Println(err) 
        return 
    } 
    defer resp.Body.Close() 
    body, err := ioutil.ReadAll(resp.Body) 
    fmt.Println(string(body)) 
    fmt.Println(resp.StatusCode) 
    if resp.StatusCode == 200 { 
        fmt.Println("ok") 
    } 
} 

带参数的GET请求

package main 
 
import ( 
    "fmt" 
    "io/ioutil" 
    "net/http" 
) 
 
func main(){ 
    resp, err := http.Get("http://www.baidu.com?name=Paul_Chan&age=26") 
    if err != nil { 
        fmt.Println(err) 
        return 
    } 
    defer resp.Body.Close() 
    body, _ := ioutil.ReadAll(resp.Body) 
    fmt.Println(string(body)) 
} 

如果我们想要把一些参数做成变量而不是直接放到url中怎么操作,代码例子如下:

package main 
 
import ( 
    "fmt" 
    "io/ioutil" 
    "net/http" 
    "net/url" 
) 
 
func main(){ 
    params := url.Values{} 
    Url, err := url.Parse("http://www.baidu.com") 
    if err != nil { 
        return 
    } 
    params.Set("name","Paul_Chan") 
    params.Set("age","26") 
    //如果参数中有中文参数,这个方法会进行URLEncode 
    Url.RawQuery = params.Encode() 
    urlPath := Url.String() 
    fmt.Println(urlPath) // https://www.baidu.com?age=26&name=Paul_chan 
    resp,err := http.Get(urlPath) 
    defer resp.Body.Close() 
    body, _ := ioutil.ReadAll(resp.Body) 
    fmt.Println(string(body)) 
} 

解析JSON类型的返回结果

package main 
 
import ( 
    "encoding/json" 
    "fmt" 
    "io/ioutil" 
    "net/http" 
) 
 
type result struct { 
    Args string `json:"args"` 
    Headers map[string]string `json:"headers"` 
    Origin string `json:"origin"` 
    Url string `json:"url"` 
} 
 
func main() { 
    resp, err := http.Get("http://xxx.com") 
    if err != nil { 
        return 
    } 
    defer resp.Body.Close() 
    body, _ := ioutil.ReadAll(resp.Body) 
    fmt.Println(string(body)) 
    var res result 
    _ = json.Unmarshal(body,&res) 
    fmt.Printf("%#v", res) 
} 

GET请求添加请求头

package main 
 
import ( 
    "fmt" 
    "io/ioutil" 
    "net/http" 
) 
 
func main() { 
    client := &http.Client{} 
    req,_ := http.NewRequest("GET","http://xxx.com",nil) 
    req.Header.Add("name","Paul_Chan") 
    req.Header.Add("age","26") 
    resp,_ := client.Do(req) 
    body, _ := ioutil.ReadAll(resp.Body) 
    fmt.Printf(string(body)) 
} 

从上述的结果可以看出我们设置的头是成功了:

{ 
  "args": {},  
  "headers": { 
    "Accept-Encoding": "gzip",  
    "Age": "26",  
    "Host": "xxx.com",  
    "Name": "Paul_Chan",  
    "User-Agent": "Go-http-client/1.1" 
  },  
  "origin": "211.138.20.170, 211.138.20.170",  
  "url": "https://xxx.com" 
} 

golang 发起POST请求

基本的POST使用

package main 
 
import ( 
    "fmt" 
    "io/ioutil" 
    "net/http" 
    "net/url" 
) 
 
func main() { 
    urlValues := url.Values{} 
    urlValues.Add("name","Paul_Chan") 
    urlValues.Add("age","26") 
    resp, _ := http.PostForm("http://xxx.com/post",urlValues) 
    body, _ := ioutil.ReadAll(resp.Body) 
    fmt.Println(string(body)) 
} 
//结果如下: 
/****************** 
{ 
  "args": {},  
  "data": "",  
  "files": {},  
  "form": { 
    "age": "26",  
    "name": "Paul_Chan" 
  },  
  "headers": { 
    "Accept-Encoding": "gzip",  
    "Content-Length": "19",  
    "Content-Type": "application/x-www-form-urlencoded",  
    "Host": "httpbin.org",  
    "User-Agent": "Go-http-client/1.1" 
  },  
  "json": null,  
  "origin": "211.138.20.170, 211.138.20.170",  
  "url": "https://httpbin.org/post" 
} 
******************/ 

另外一种方式

package main 
 
import ( 
    "fmt" 
    "io/ioutil" 
    "net/http" 
    "net/url" 
    "strings" 
) 
 
func main() { 
    urlValues := url.Values{ 
        "name":{"Paul_Chan"}, 
        "age":{"26"}, 
    } 
    reqBody:= urlValues.Encode() 
    resp, _ := http.Post("http://xxx.com/post", "text/html",strings.NewReader(reqBody)) 
    body,_:= ioutil.ReadAll(resp.Body) 
    fmt.Println(string(body)) 
} 
//结果如下: 
/************** 
{ 
  "args": {},  
  "data": "age=26&name=Paul_Chan",  
  "files": {},  
  "form": {},  
  "headers": { 
    "Accept-Encoding": "gzip",  
    "Content-Length": "19",  
    "Content-Type": "text/html",  
    "Host": "httpbin.org",  
    "User-Agent": "Go-http-client/1.1" 
  },  
  "json": null,  
  "origin": "211.138.20.170, 211.138.20.170",  
  "url": "https://httpbin.org/post" 
} 
***************/ 

发送JSON数据的post请求

package main 
 
import ( 
    "bytes" 
    "encoding/json" 
    "fmt" 
    "io/ioutil" 
    "net/http" 
) 
 
func main() { 
    client := &http.Client{} 
    data := make(map[string]interface{}) 
    data["name"] = "zhaofan" 
    data["age"] = "23" 
    bytesData, _ := json.Marshal(data) 
    req, _ := http.NewRequest("POST","http://httpbin.org/post",bytes.NewReader(bytesData)) 
    resp, _ := client.Do(req) 
    body, _ := ioutil.ReadAll(resp.Body) 
    fmt.Println(string(body)) 
} 
//结果如下: 
/************* 
{ 
  "args": {},  
  "data": "{/"age/":/"23/",/"name/":/"zhaofan/"}",  
  "files": {},  
  "form": {},  
  "headers": { 
    "Accept-Encoding": "gzip",  
    "Content-Length": "29",  
    "Host": "httpbin.org",  
    "User-Agent": "Go-http-client/1.1" 
  },  
  "json": { 
    "age": "23",  
    "name": "zhaofan" 
  },  
  "origin": "211.138.20.170, 211.138.20.170",  
  "url": "https://httpbin.org/post" 
} 
*************/ 

不用client的post请求

package main 
 
import ( 
    "bytes" 
    "encoding/json" 
    "fmt" 
    "io/ioutil" 
    "net/http" 
) 
 
func main() { 
    data := make(map[string]interface{}) 
    data["name"] = "zhaofan" 
    data["age"] = "23" 
    bytesData, _ := json.Marshal(data) 
    resp, _ := http.Post("http://httpbin.org/post","application/json", bytes.NewReader(bytesData)) 
    body, _ := ioutil.ReadAll(resp.Body) 
    fmt.Println(string(body)) 
} 

做任何事情,都要以创业的心态去干!

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/18131.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论