關於beego-httpbib庫的不解問題,請求大家支援
關於
使用了beego 的 httplib 請求庫
場景
對資料進行加密處理,然後以字串型別傳送給webservice 進行請求,拿到返回資料列印
問題
出現了傳送相同的請求體,不同請求結果
簡略分析說明
程式碼如下:
// new request req := httplib.NewBeegoRequest(host+baseUrl, method) setHeader(req) // 要加密的資料 _params := `{"phone":"13662676666","password":"e10adc3949ba59abbe56e057f20f883e","rememberLogin":"true"}` // 簡單加密, 拿到兩個加密過的 base64字串 crypto := Crypto{} encText, encSeckey, _ := crypto.Encrypt(_params) // 對資料 encode並拼接 paramsBody := "params=" + url.QueryEscape(encText) + "&encSeckey=" + encSeckey // 拼接結果為 // "params=PaBwf0ljoojLjWSjRWn6mKPWndhYwSLDhHnEUbkSdjpXCHb6ACx08uuTXcnqjmhhvjBIeClm%2fTcqyjEiwKsIFIfnD5%2fUYCulG8c4LjzuKpwToPYSiYaMFxE6aq02CI5BEOsJklkviywLaS95l37OmXPS40Kxu7KuFMke0FyQeOXfo6JPD0Vz6qsht34Kts2F&encSecKey=2e983589cf245726cae4d87690680ec0f58b30948bd99e6698f1d9270bfd12d869c9a54e0ae8885801ab01d16c60bc39420a102907c509a9671a8338932bfd500d3d1560cb2ffaa3e308c8b962a62e1d4c0ffbaf044ca6b41ea8932ad88b1d8355c1e48984c25af6f9ef3dd2ffad216aaeb7cdf8dba533fcef099286ce98e617" // 設定請求體 req.Body(paramsBody) // 取結果 result, _ := req.String() // 最終結果應該類似返回了 `{code: 200, data: "ok"}` return result
-
理論上這是會拿到請求的結果,無論成功失敗都會有 response body 回來
-
但是實際上無論怎麼請求,結果都是空的,這個也許是伺服器的問題,但是下面是我對結果還原的過程:
// 我將加密的結果直接打印出來,hard code 為一個變數 _paramsBody := "params=PaBwf0ljoojLjWSjRWn6mKPWndhYwSLDhHnEUbkSdjpXCHb6ACx08uuTXcnqjmhhvjBIeClm%2fTcqyjEiwKsIFIfnD5%2fUYCulG8c4LjzuKpwToPYSiYaMFxE6aq02CI5BEOsJklkviywLaS95l37OmXPS40Kxu7KuFMke0FyQeOXfo6JPD0Vz6qsht34Kts2F&encSecKey=2e983589cf245726cae4d87690680ec0f58b30948bd99e6698f1d9270bfd12d869c9a54e0ae8885801ab01d16c60bc39420a102907c509a9671a8338932bfd500d3d1560cb2ffaa3e308c8b962a62e1d4c0ffbaf044ca6b41ea8932ad88b1d8355c1e48984c25af6f9ef3dd2ffad216aaeb7cdf8dba533fcef099286ce98e617" // 設定請求體 req.Body(paramsBody) // 取結果 result, _ := req.String() // 最終返回了我要的資料 return result
直接 hard code 的資料返回了正確的結果,但是我加密之後在拼接再設定進請求體卻是錯的。
我再把加密出來的字串跟 hard code 的字串做了一次比較,程式碼裡實現:
fmt.Println("Is Equal:", strings.EqualFold(paramsBody, _paramsBody)) // 列印結果為: Is Equal: true
這是什麼情況 - -!!!
頭是正常的, "Content-Type":"application/x-www-form-urlencoded",
同一個請求體,為啥結果會不一樣? 嘗試了很多種情況,但是實在搞不懂這是為什麼,請求指教- -!
另一個費解的問題,根據 httplib 庫的api,獲取請求體可以用:
req.GetRequest().Body
但是,我嘗試了很多次,發現很多時候,這樣子獲取請求體資料並打印出來,結果是空的:
{}
還有很多順序調整的嘗試,但是沒有發現規律。我用的是 Golang ,會是編譯器問題嗎?