整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Go語言Web編程,POST請求,Form、Post

          Go語言Web編程,POST請求,Form、PostForm、MultipartForm

          equest查詢參數URL Query

          URL Query

          1. GET

          上一節學習了GET請求獲取,Go語言Web編程,Request查詢參數URL Query GET,

          2. POST

          我們不用html提交POST請求,考慮用2個工具,第一個是Postman,第二個是Go的單元測試方法。

          (1)Form(不僅能獲取GET請求,也可以獲取到POST請求內容,而POST請求優先GET)

          調用ParseForm或者ParseMultipartForm解析Request

          相應訪問Form、PostForm或MultipartForm字段

          實現函數源碼

          測試代碼:

          執行結果

          解析源碼:

          27行:w.Header().Set("Content-Type", "application/json"),設置了響應的內容類型為Json。

          29行://調用ParseForm或者ParseMultipartForm解析Request

          32行:可以進行指定Key獲取與給定鍵關聯的第一個值。如果沒有與鍵關聯的值,Get返回空字符串。

          37行到40行:將Form數據轉換成json類型,通過for range將所有的值轉成map。

          44行:將map轉成json格式

          解析測試代碼:

          // 使用http.HandlerFunc聲明一個handler,將測試函數PostData傳入進去

          handler :=http.HandlerFunc(PostData)

          // 用剛申明的handler啟動測試服務器

          server :=httptest.NewServer(handler)

          //啟動服務器最后要關閉

          defer server.Close()

          // 顯示URL地址

          t.Log(server.URL)

          // 定義URL傳遞的參數值,和Method無關,

          //使用 url.Values進行定義,類型是 map[string][]string

          values :=url.Values{"id": {"888"}, "name": {"張無忌"}}

          //將傳遞的參數值進行編碼,

          //例如id=123&name=zhangsnafeng,

          //通過Encode()實現,返回值類型是string

          e :=values.Encode()

          t.Log(e)

          //這里啟動1個POST請求,

          //第一個參數是指定的URL,string類型

          //第二個參數是發送的請求內容的類型, string類型。

          //第三個是發送的主體。 io.Reader類型,因此需要strings.NewReader()將拼接的字符串進行轉換

          response, _ :=http.Post(

          server.URL+"/post",

          "application/x-www-form-urlencoded",

          strings.NewReader(e),

          )

          //通過ioutil.ReadAll讀取body內容,返回值是字節集[]byte類型

          bytes, _ :=ioutil.ReadAll(response.Body)

          t.Log(string(bytes))

          (2)PostForm(不能獲取GET請求,只能獲取到POST請求內容)

          使用Form的結果

          可以看到Form不僅獲取到了Get的請求信息,也獲取到了Post的請求信息。

          當我們僅需要Post請求信息怎么辦呢?

          執行結果

          可以看到,只用修改1個位置就完成了這個功能。

          代碼詳解同上面第一個詳解大同小異:

          60行: 采用PostForm方法獲取表單內容

          (3)MultipartForm

          (3)FormValue與PostFormValue,用法相似

          代碼解析:

          func FormValueData(w http.ResponseWriter, r *http.Request) {

          _=r.ParseForm()

          //FormValue優先取POST的name的第一個值,如果POST沒有name,name就取GET的Name。

          name1 :=r.FormValue("name")

          //FormValue取POST、PATCH或PUT的name的第一個值。URL查詢參數將被忽略。如果key不存在,PostFormValue返回空字符串。

          name2 :=r.PostFormValue("name")

          data :=map[string]interface{}{

          "name1":name1,

          "name2":name2,

          }

          于HTTP協議,做Web編程的開發人員再熟悉不過了。不論是前端Html頁面通過Ajax還是客戶端通過HttpClient又或服務端與服務端之間的Rest請求,這都需要通過Http協議完成請求


          主站蜘蛛池模板: 在线播放偷拍一区精品| 亚洲区精品久久一区二区三区| 亚洲日韩激情无码一区| 国产福利电影一区二区三区| 国产视频一区二区| 国产产一区二区三区久久毛片国语| 国产一区韩国女主播| 国产精品一区三区| 无码人妻aⅴ一区二区三区有奶水 人妻夜夜爽天天爽一区 | 国产自产V一区二区三区C| 一区二区三区视频在线观看| 国产精品久久久久一区二区| 一区二区三区四区在线视频| 国产福利一区二区三区在线观看 | 久久青草精品一区二区三区| 国产在线精品一区免费香蕉| 午夜性色一区二区三区免费不卡视频| 无码人妻av一区二区三区蜜臀 | 激情爆乳一区二区三区| 中文乱码人妻系列一区二区| 亚洲午夜精品一区二区| 消息称老熟妇乱视频一区二区| 四虎在线观看一区二区 | 亚洲熟妇av一区| 亚洲国产一区在线| 亚洲色偷偷偷网站色偷一区| 无码国产精品一区二区免费16| 亚洲日本一区二区三区在线| 久久AAAA片一区二区| 久久成人国产精品一区二区 | 在线视频一区二区日韩国产| 国产亚洲福利一区二区免费看| 国产伦精品一区二区三区免费迷 | 一区二区三区视频观看| 国产一区二区女内射| 文中字幕一区二区三区视频播放| 色婷婷一区二区三区四区成人网| 一本一道波多野结衣一区| 国产日韩视频一区| 亚洲视频在线一区| 亚洲一区二区三区国产精品|