• go 发送http请求


    参考文档:
    https://golang-tech-stack.com/post/4989

    本文内容纲要:

    普通的get请求

    package main
    
    import (
        "io/ioutil"
        "fmt"
        "net/http"
    )
    
    func main() {
        res,_ :=http.Get("https://www.baidu.com/")
        defer res.Body.Close()
        body,_ := ioutil.ReadAll(res.Body)
        fmt.Print(body)
    }
    

    带参数的get请求(参数不放在url里)

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

    get请求添加请求头

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

    post请求

    package main
    
    import (
        "fmt"
        "io/ioutil"
        "net/http"
        "net/url"
    )
    
    func main() {
        urlValues := url.Values{}
        urlValues.Add("name","zhaofan")
        urlValues.Add("age","22")
        resp, _ := http.PostForm("http://www.xxx.com",urlValues)
        defer resp.Body.close()
        body, _ := ioutil.ReadAll(resp.Body)
        fmt.Println(string(body))
    }
    

    post请求的另一种方式

    package main
    
    import (
        "fmt"
        "io/ioutil"
        "net/http"
        "net/url"
        "strings"
    )
    
    func main() {
        urlValues := url.Values{
            "name":{"zhaofan"},
            "age":{"23"},
        }
        reqBody:= urlValues.Encode()
        resp, _ := http.Post("http://www.xxx.com/post", "text/html",strings.NewReader(reqBody))
        defer resp.Body.close()
        body,_:= ioutil.ReadAll(resp.Body)
        fmt.Println(string(body))
    }
    

    post请求发送json数据

    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://www.xxx.com",bytes.NewReader(bytesData))
        resp, _ := client.Do(req)
        defer resp.Body.close()
        body, _ := ioutil.ReadAll(resp.Body)
        fmt.Println(string(body))
    }
    

    不用client

    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://www.xxx.com","application/json", bytes.NewReader(bytesData))
        defer resp.Body.close()
        body, _ := ioutil.ReadAll(resp.Body)
        fmt.Println(string(body))
    }
    

    说白了,我们记住http.get 和http.post就可以了

  • 相关阅读:
    Proguard打包混淆报错:can't find superclass or interface
    proguard returned with error code 1.异常的解决方法
    android 混淆配置
    解决android混淆编译出现Proguard returned with error code 1和文件名、目录名或卷标语法不正确错误
    Eclipse提示No java virtual machine
    [mysql]数据库查询实例
    [算法]高效求素数
    [笔试]程序员面试宝典
    [linux]进程间通信IPC
    [linux]信号的捕获和处理
  • 原文地址:https://www.cnblogs.com/haima/p/16354417.html
Copyright © 2020-2023  润新知