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 国产成人久久精品激情,久久精品在现线观看免费15,免费国产成人高清视频网站

          整合營銷服務商

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

          免費咨詢熱線:

          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不卡| 熟妇人妻AV无码一区二区三区| 一区国产传媒国产精品| 奇米精品一区二区三区在| 国产大秀视频一区二区三区| 精品无码一区在线观看| 日韩一区二区在线免费观看| 国产精品伦一区二区三级视频| 精品一区二区三区水蜜桃| 亚洲av无码片vr一区二区三区| 亚洲av一综合av一区| 国产一区二区在线看| 国产精品小黄鸭一区二区三区| 日韩久久精品一区二区三区 | 精品少妇人妻AV一区二区| 无码少妇一区二区性色AV| 色欲AV蜜臀一区二区三区| 成人无码AV一区二区| 中文字幕一区二区区免| 精品视频在线观看你懂的一区 | 国产午夜精品一区二区三区嫩草 | 亚洲午夜精品第一区二区8050| 国产乱码一区二区三区| 麻豆国产一区二区在线观看| 亚洲av成人一区二区三区| 亚洲一区在线观看视频| 99精品国产高清一区二区麻豆| 日本在线一区二区| 人妻体内射精一区二区三四| 末成年女AV片一区二区| 亚洲av福利无码无一区二区| 无码国产精品一区二区免费vr | 久久精品国产亚洲一区二区| 国产一区二区三精品久久久无广告| 精品久久久久一区二区三区 | 成人影片一区免费观看| 中文字幕一区二区在线播放 | 日韩在线视频不卡一区二区三区|