关于beego-httpbib库的不解问题,请求大家支援

josenspire · · 1567 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

#### 关于 > 使用了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 ,会是编译器问题吗?

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1567 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传