• go代码示例:发送http网络请求


    POST JSON

    func main() {
        url := "http://restapi3.apiary.io/notes"
        fmt.Println("URL:>", url)
        //也可以使用marshall 一个struc map array ....
        var jsonStr = []byte(`{"title":"Buy cheese and bread for breakfast."}`)
        req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
        //自定义header
        //可以定义 cookie authorization
        req.Header.Set("X-Custom-Header", "myvalue")
        req.Header.Set("Content-Type", "application/json")
    
        client := &http.Client{}
        resp, err := client.Do(req)
        if err != nil {
            panic(err)
        }
        defer resp.Body.Close()
    
        fmt.Println("response Status:", resp.Status)
        fmt.Println("response Headers:", resp.Header)
        body, _ := ioutil.ReadAll(resp.Body)
        fmt.Println("response Body:", string(body))
    }
    

    POST 表单和文件

    package main
    
    import (
        "bytes"
        "fmt"
        "io"
        "mime/multipart"
        "net/http"
        "net/http/httptest"
        "net/http/httputil"
        "os"
        "strings"
    )
    
    func main() {
    
        var client *http.Client
        var remoteURL string
        {
            //setup a mocked http client.
            ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
                b, err := httputil.DumpRequest(r, true)
                if err != nil {
                    panic(err)
                }
                fmt.Printf("%s", b)
            }))
            defer ts.Close()
            client = ts.Client()
            remoteURL = ts.URL
        }
    
        //prepare the reader instances to encode
        values := map[string]io.Reader{
            "file":  mustOpen("main.go"), // lets assume its this file
            "other": strings.NewReader("hello world!"),
        }
        err := Upload(client, remoteURL, values)
        if err != nil {
            panic(err)
        }
    }
    
    func Upload(client *http.Client, url string, values map[string]io.Reader) (err error) {
        // Prepare a form that you will submit to that URL.
        var b bytes.Buffer
        w := multipart.NewWriter(&b)
        for key, r := range values {
            var fw io.Writer
            if x, ok := r.(io.Closer); ok {
                defer x.Close()
            }
            // 添加图片文件
            if x, ok := r.(*os.File); ok {
                if fw, err = w.CreateFormFile(key, x.Name()); err != nil {
                    return
                }
            } else {
                // Add other fields
                if fw, err = w.CreateFormField(key); err != nil {
                    return
                }
            }
            if _, err = io.Copy(fw, r); err != nil {
                return err
            }
    
        }
        // Don't forget to close the multipart writer.
        // If you don't close it, your request will be missing the terminating boundary.
        w.Close()
    
        // Now that you have a form, you can submit it to your handler.
        req, err := http.NewRequest("POST", url, &b)
        if err != nil {
            return
        }
        // Don't forget to set the content type, this will contain the boundary.
        req.Header.Set("Content-Type", w.FormDataContentType())
    
        // Submit the request
        res, err := client.Do(req)
        if err != nil {
            return
        }
    
        // Check the response
        if res.StatusCode != http.StatusOK {
            err = fmt.Errorf("bad status: %s", res.Status)
        }
        return
    }
    
    func mustOpen(f string) *os.File {
        r, err := os.Open(f)
        if err != nil {
            panic(err)
        }
        return r
    }
    

    更多的配置

    func httpDo() {
        client := &http.Client{}
        //可以使用 DELTE PUT PATCH HEAD GET POST
        req, err := http.NewRequest("POST", "https://mojotv.cn/demo/accept.json", strings.NewReader("name=mojotv.cn"))
        if err != nil {
            // handle error
        }
     
        req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
        req.Header.Set("Cookie", "name=mojotv.cn")
     
        resp, err := client.Do(req)
     
        defer resp.Body.Close()
     
        body, err := ioutil.ReadAll(resp.Body)
        if err != nil {
            // handle error
        }
     
        fmt.Println(string(body))
    }
    

    The End

    线上交流工具: 在你的terminal中输入 ssh $用户@mojotv.cn

    在你的terminal中输入 ssh mojotv.cn hn 查看最新 hacknews

  • 相关阅读:
    Java8新特性之Collectors
    java日期的运用(DateUtils工具类)
    正则表达式30分钟入门教程
    一篇非常好的Spring教程
    结合实际需求,在webapi内利用WebSocket建立单向的消息推送平台,让A页面和服务端建立WebSocket连接,让其他页面可以及时给A页面推送消息
    关于企业微信对接内部应用开发,access_token的管理机制和业务接口调用项目实战的八个要点
    企业微信使用DevTools但显示为空白,解决方法
    16.刚体碰撞事件监测与处理
    15.碰撞体
    14.刚体组件Rigidbody
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/16436972.html
Copyright © 2020-2023  润新知