整合營銷服務商

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

          免費咨詢熱線:

          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協議完成請求


          主站蜘蛛池模板: 国产精品一区二区电影| 中文字幕在线不卡一区二区| 亚洲AV无码一区二区三区久久精品| 色狠狠色狠狠综合一区| 国产一区二区在线视频播放| 精品国产一区二区三区不卡 | 国产在线精品一区在线观看| 国产精品分类视频分类一区| 亚洲av成人一区二区三区| 中文字幕亚洲综合精品一区| 亚洲视频一区二区三区| 在线精品视频一区二区| 国产乱码精品一区二区三区四川人| 精品香蕉一区二区三区| 少妇一晚三次一区二区三区| 亚洲国产成人久久一区二区三区 | 中文字幕一区二区免费| 中文字幕精品无码一区二区三区| 国产免费一区二区视频| 99久久人妻精品免费一区| 国产精品亚洲一区二区麻豆| 怡红院一区二区三区| 亚洲第一区在线观看| 激情一区二区三区| 在线欧美精品一区二区三区| 亚洲av福利无码无一区二区| 日本精品无码一区二区三区久久久 | 亚洲愉拍一区二区三区| 色噜噜AV亚洲色一区二区| 国产主播一区二区三区在线观看 | 精品一区二区三区四区在线| 国产麻豆精品一区二区三区 | 国产乱码精品一区二区三区麻豆 | 精品无码国产一区二区三区麻豆| 亚洲视频一区二区在线观看| 无码少妇一区二区| 午夜天堂一区人妻| 日本一区二区在线| 无码国产精品一区二区免费模式 | 久久精品动漫一区二区三区| 国产成人无码一区二区三区在线|