Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 亚洲国产美女视频,亚洲综合色婷婷在线观看,自拍偷自拍亚洲精品10p

          整合營銷服務商

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

          免費咨詢熱線:

          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日韩精品一区二区三区| 一区二区在线电影| 日韩人妻无码一区二区三区久久99| 激情啪啪精品一区二区| 午夜视频一区二区| 精品国产亚洲一区二区三区在线观看| 日韩精品无码免费一区二区三区| 精品国产亚洲一区二区在线观看 | 中文字幕国产一区| 国产一区二区三区日韩精品| 国产情侣一区二区| 无码人妻精品一区二区三区久久久 | AV怡红院一区二区三区| 亚洲av午夜精品一区二区三区| 国产精品一区二区香蕉| 国产av一区二区精品久久凹凸| 国产视频一区二区| 精品一区二区三区水蜜桃| 精品91一区二区三区| 一区二区三区无码高清视频| 无码人妻久久一区二区三区蜜桃| 国产成人AV区一区二区三| 亚洲视频在线一区二区| 色狠狠一区二区三区香蕉蜜桃| 国内偷窥一区二区三区视频| 亚洲A∨无码一区二区三区| 久久精品一区二区东京热| 色欲精品国产一区二区三区AV| 色狠狠AV一区二区三区| 亚洲愉拍一区二区三区| 国产精品一区二区三区久久| 97久久精品午夜一区二区| 亚洲国产精品一区二区久久hs| 久久精品无码一区二区无码 | 亚洲人AV永久一区二区三区久久| 久久无码一区二区三区少妇| 无码一区二区三区免费|