最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

go Http Post 發(fā)送文件流案例

 更新時間:2020年12月18日 10:27:17   作者:中國流浪貓  
這篇文章主要介紹了go Http Post 發(fā)送文件流案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

我就廢話不多說了,大家還是直接看代碼吧~

package main
import (
 "net/http"
 "net/url"
 "fmt"
 "io/ioutil"
 _ "io"
 "bytes"
)
func main() {
 postFile()
}
func post() {
  //這是一個Post 參數(shù)會被返回的地址
  strinUrl:="http://localhost:8080/aaa"`這里寫代碼片`
  resopne,err:= http.PostForm(strinUrl,url.Values{"num":{"456"},"num1":{"123"}})
  if err !=nil {
  fmt.Println("err=",err)
  }
  defer func() {
   resopne.Body.Close()
   fmt.Println("finish")
  }()
  body,err:=ioutil.ReadAll(resopne.Body)
  if err!=nil {
   fmt.Println(" post err=",err)
  }
  fmt.Println(string(body))
}
func postFile(){
 //這是一個Post 參數(shù)會被返回的地址
 strinUrl:="http://localhost:8080/aaa"
 byte,err:=ioutil.ReadFile("post.txt")
 resopne,err :=http.Post(strinUrl,"multipart/form-data",bytes.NewReader(byte))
 if err !=nil {
  fmt.Println("err=",err)
 }
 defer func() {
  resopne.Body.Close()
  fmt.Println("finish")
 }()
 body,err:=ioutil.ReadAll(resopne.Body)
 if err!=nil {
  fmt.Println(" post err=",err)
 }
 fmt.Println(string(body))
}

水滴石穿。這里把Go Http Post 參數(shù)的函數(shù)也貼了處理主要對比兩者不同之處。

補充:golang爬蟲 模擬各種情況的post請求 文件上傳

go實現(xiàn)各種類型的post請求

請求測試地址

var (
 requestPostURL string = "http://httpbin.org/post"
 // 接收文件的服務(wù)自己實現(xiàn)qwq
 // 接收一張圖片上傳 postman的key file
 imagePostURL  string = "/imageUpload/upload"
 // 接收多張圖片上傳 postman的key file
 imageMultiPostURL string = "/imageUpload/uploads"
)

application/x-www-from-urlencoded

說明

application/x-www-from-urlencoded,會將表單內(nèi)的數(shù)據(jù)轉(zhuǎn)換為鍵值對,比如,name=java&age = 23

示例

// 
func postXWwwFromURLEncoded() {
 client := http.Client{}
 // 不帶任何的請求數(shù)據(jù)post
 // req, err := http.NewRequest(http.MethodPost, requestPostURL, nil)
 // 帶數(shù)據(jù)
 urlValues := url.Values{}
 urlValues.Add("name", "張三")
 urlValues.Add("age", "18")
 reqBody := urlValues.Encode()
 req, err := http.NewRequest(http.MethodPost, requestPostURL, strings.NewReader(reqBody))
 if err != nil {
 log.Println("err")
 }
 resp, err := client.Do(req)
 if err != nil {
 log.Println("err")
 }
 defer resp.Body.Close()
 b, err := ioutil.ReadAll(resp.Body)
 if err != nil {
 log.Println("err")
 }
 fmt.Println(string(b))
 // urlValues := url.Values{}
 // urlValues.Add("name","zhaofan")
 // urlValues.Add("age","22")
 // resp, _ := http.PostForm("http://httpbin.org/post",urlValues)
}

raw

說明

// 也就是入?yún)⒎绞綖閖son

// 可以上傳任意格式的文本,可以上傳text、json、xml、html

示例

func postRaw() {
 client := http.Client{}
 // 帶數(shù)據(jù) json 類型
 urlValues := map[string]interface{}{
 "name":  "jack",
 "age":  18,
 "is_active": true,
 }
 b1, _ := json.Marshal(&urlValues)
 // b1, _ := json.Marshal(&urlValues)
 req, err := http.NewRequest(http.MethodPost, requestPostURL, bytes.NewReader(b1))
 if err != nil {
 log.Println("err")
 }
 resp, err := client.Do(req)
 if err != nil {
 log.Println("err")
 }
 defer resp.Body.Close()
 b, err := ioutil.ReadAll(resp.Body)
 if err != nil {
 log.Println("err")
 }
 fmt.Println(string(b))
}

multipart/form-data 帶普通參數(shù)

說明

// multipart/form-data

// 既可以上傳文件,也可以上傳鍵值對

// 上傳的字段是文件時,會有Content-Type來說明文件類型;content-disposition

// 可以上傳多個文件

示例

// multipart/form-data 帶普通參數(shù) key-value
func postFormDataWithParams() {
 client := http.Client{}
 // 不帶任何的請求數(shù)據(jù)post
 body := &bytes.Buffer{}
 writer := multipart.NewWriter(body)
 params := map[string]string{
 "name": "zhangsan",
 "age": "12",
 }
 for key, val := range params {
 _ = writer.WriteField(key, val)
 }
 writer.Close()
 req, err := http.NewRequest(http.MethodPost, requestPostURL, body)
 if err != nil {
 log.Println("err")
 }
 resp, err := client.Do(req)
 if err != nil {
 log.Println("err")
 }
 defer resp.Body.Close()
 b, err := ioutil.ReadAll(resp.Body)
 if err != nil {
 log.Println("err")
 }
 fmt.Println(string(b))
}

multipart/form-data 上傳一個文件

// key:file 里面放一個文件
// multipart/form-data 傳一個文件
func postFormDataWithSingleFile() {
 client := http.Client{}
 bodyBuf := &bytes.Buffer{}
 bodyWrite := multipart.NewWriter(bodyBuf)
 file, err := os.Open("./images/img.jpg")
 defer file.Close()
 if err != nil {
 log.Println("err")
 }
 // file 為key
 fileWrite, err := bodyWrite.CreateFormFile("file", "img.jpg")
 _, err = io.Copy(fileWrite, file)
 if err != nil {
 log.Println("err")
 }
 bodyWrite.Close() //要關(guān)閉,會將w.w.boundary刷寫到w.writer中
 // 創(chuàng)建請求
 contentType := bodyWrite.FormDataContentType()
 req, err := http.NewRequest(http.MethodPost, imagePostURL, bodyBuf)
 if err != nil {
 log.Println("err")
 }
 // 設(shè)置頭
 req.Header.Set("Content-Type", contentType)
 resp, err := client.Do(req)
 if err != nil {
 log.Println("err")
 }
 defer resp.Body.Close()
 b, err := ioutil.ReadAll(resp.Body)
 if err != nil {
 log.Println("err")
 }
 fmt.Println(string(b))
}

multipart/form-data 上傳多個文件

// key:file 里面放多個文件
// multipart/form-data 傳多個文件
func postFormDataWithMultipartFile() {
 client := http.Client{}
 bodyBuf := &bytes.Buffer{}
 bodyWrite := multipart.NewWriter(bodyBuf)
 images := []string{"img.jpg", "img1.jpg"}
 for _, val := range images {
 file, err := os.Open("./images/" + val)
 defer file.Close()
 if err != nil {
 log.Println("err")
 }
 fileWrite, err := bodyWrite.CreateFormFile("file", val)
 _, err = io.Copy(fileWrite, file)
 if err != nil {
 log.Println("err")
 }
 }
 bodyWrite.Close() //要關(guān)閉,會將w.w.boundary刷寫到w.writer中
 // 創(chuàng)建請求
 req, err := http.NewRequest(http.MethodPost, imagePostURL, bodyBuf)
 if err != nil {
 log.Println("err")
 }
 // 設(shè)置頭
 contentType := bodyWrite.FormDataContentType()
 req.Header.Set("Content-Type", contentType)
 resp, err := client.Do(req)
 if err != nil {
 log.Println("err")
 }
 defer resp.Body.Close()
 b, err := ioutil.ReadAll(resp.Body)
 if err != nil {
 log.Println("err")
 }
 fmt.Println(string(b))
}

binary

// Content-Type:application/octet-stream,從字面意思得知,只可以上傳二進制數(shù)據(jù),通常用來上傳文件,
// 由于沒有鍵值,所以,一次只能上傳一個文件
func postBinary() {
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Go語言中的格式化占位符的實現(xiàn)示例

    Go語言中的格式化占位符的實現(xiàn)示例

    在Go語言中,fmt包提供了豐富的格式化占位符用于輸出不同類型的數(shù)據(jù),了解和選擇合適的占位符對于確保輸出內(nèi)容的正確性和可讀性至關(guān)重要,本文就來介紹一下,感興趣的可以學習
    2024-10-10
  • golang 實現(xiàn)兩個結(jié)構(gòu)體復(fù)制字段

    golang 實現(xiàn)兩個結(jié)構(gòu)體復(fù)制字段

    這篇文章主要介紹了golang 實現(xiàn)兩個結(jié)構(gòu)體復(fù)制字段,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Goland使用delve進行遠程調(diào)試的詳細教程

    Goland使用delve進行遠程調(diào)試的詳細教程

    網(wǎng)上給出的使用delve進行遠程調(diào)試,都需要先在本地交叉編譯或者在遠程主機上編譯出可運行的程序,然后再用delve在遠程啟動程序,本教程會將上面的步驟簡化為只需要兩步,1,在遠程運行程序2,在本地啟動調(diào)試,需要的朋友可以參考下
    2024-08-08
  • Go設(shè)計模式之狀態(tài)模式講解和代碼示例

    Go設(shè)計模式之狀態(tài)模式講解和代碼示例

    狀態(tài)是一種行為設(shè)計模式,?讓你能在一個對象的內(nèi)部狀態(tài)變化時改變其行為,該模式將與狀態(tài)相關(guān)的行為抽取到獨立的狀態(tài)類中,?讓原對象將工作委派給這些類的實例,?而不是自行進行處理,本文將通過代碼示例給大家簡單的介紹一下Go狀態(tài)模式
    2023-08-08
  • Golang迭代如何在Go中循環(huán)數(shù)據(jù)結(jié)構(gòu)使用詳解

    Golang迭代如何在Go中循環(huán)數(shù)據(jù)結(jié)構(gòu)使用詳解

    這篇文章主要為大家介紹了Golang迭代之如何在Go中循環(huán)數(shù)據(jù)結(jié)構(gòu)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • go語言實現(xiàn)字符串與其它類型轉(zhuǎn)換(strconv包)

    go語言實現(xiàn)字符串與其它類型轉(zhuǎn)換(strconv包)

    strconv包是Go語言標準庫的一部分,主要提供字符串與基本數(shù)據(jù)類型之間的轉(zhuǎn)換功能,使用strconv包可以方便地在不同類型之間進行轉(zhuǎn)換,滿足日常編程中的需求,感興趣的可以了解一下
    2024-10-10
  • 在Go語言開發(fā)中實現(xiàn)高性能的分布式日志收集的方法

    在Go語言開發(fā)中實現(xiàn)高性能的分布式日志收集的方法

    本文介紹了在Go語言開發(fā)中實現(xiàn)高性能分布式日志收集的關(guān)鍵步驟和考慮因素,包括日志生成與采集、日志傳輸、日志收集器的高性能網(wǎng)絡(luò)I/O、日志存儲與分析、監(jiān)控與告警系統(tǒng)、擴展性與可維護性等方面,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-01-01
  • 為什么不建議在go項目中使用init()

    為什么不建議在go項目中使用init()

    這篇文章主要介紹了為什么不建議在go項目中使用init(),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Go并發(fā)讀寫文件、分片寫、分片下載文件的實現(xiàn)示例

    Go并發(fā)讀寫文件、分片寫、分片下載文件的實現(xiàn)示例

    讀寫文件在很多項目中都可以用到,本文主要介紹了Go并發(fā)讀寫文件、分片寫、分片下載文件的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Go語言獲取本機邏輯CPU數(shù)量的方法

    Go語言獲取本機邏輯CPU數(shù)量的方法

    這篇文章主要介紹了Go語言獲取本機邏輯CPU數(shù)量的方法,實例分析了runtime庫的操作技巧,需要的朋友可以參考下
    2015-03-03

最新評論

峨边| 福州市| 深水埗区| 庆云县| 承德市| 潮安县| 石景山区| 临洮县| 长葛市| 图木舒克市| 固安县| 泰安市| 海口市| 特克斯县| 商都县| 荔浦县| 施甸县| 河东区| 名山县| 府谷县| 宝鸡市| 周宁县| 故城县| 攀枝花市| 苍溪县| 东辽县| 湄潭县| 石狮市| 达尔| 云阳县| 柏乡县| 改则县| 广汉市| 家居| 东港市| 罗田县| 三明市| 鄂州市| 甘孜| 临颍县| 淅川县|