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協議完成請求。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。