上一章節(jié)介紹了使用echo啟動(dòng)一個(gè)http服務(wù)器并提供一個(gè)簡(jiǎn)單的GET接口,這一章對(duì)請(qǐng)求與響應(yīng)做一下詳細(xì)的講解。

成都創(chuàng)新互聯(lián)專注于啟東網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供啟東營銷型網(wǎng)站建設(shè),啟東網(wǎng)站制作、啟東網(wǎng)頁設(shè)計(jì)、啟東網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)公司服務(wù),打造啟東網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供啟東網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
了解請(qǐng)求與響應(yīng)之前首先要知道ehco框架提供了一個(gè)Context接口,Context 表示當(dāng)前 HTTP 請(qǐng)求的上下文,我們需要知道的是Context的實(shí)現(xiàn)結(jié)構(gòu)體context,context中包含了請(qǐng)求(request)、響應(yīng)(response)以及參數(shù)等結(jié)構(gòu)體,context是一個(gè)內(nèi)部結(jié)構(gòu)體,但是對(duì)外提供了訪問的方法,我們可以在開發(fā)中使用context提供的方法做很多事情,比如獲取請(qǐng)求路徑、客戶端ip、請(qǐng)求參數(shù)等等。
request是包含了當(dāng)前請(qǐng)求信息的結(jié)構(gòu)體,我們從中可以獲取到前后端約定好的參數(shù)來作出相應(yīng)的業(yè)務(wù)邏輯,這下面開始模擬請(qǐng)求
首先模擬一個(gè)添加用戶的POST請(qǐng)求,這里使用了c.bind()這個(gè)方法,這個(gè)方法起到的作用是把表單參數(shù)或者JSON參數(shù)綁定至對(duì)應(yīng)的結(jié)構(gòu)體(這里必須是指針類型),字段需要一一對(duì)應(yīng),也就是說前端需要傳遞的表單或JSON參數(shù)名為name、age、gender才能綁定到結(jié)構(gòu)體中。
接下來模擬一個(gè)GET請(qǐng)求用來獲取用戶信息
response是包含了返回信息的結(jié)構(gòu)體,echo提供了多種類型的返回結(jié)果
上面編寫了處理請(qǐng)求的handler,這里介紹一下如何把handler注冊(cè)到路由中,這里對(duì)應(yīng)的就是上面handler。
使用golang自帶的http包創(chuàng)建http客戶端調(diào)用遠(yuǎn)程服務(wù),如果出現(xiàn) : no such host
第一種可能是服務(wù)器的最大打開文件數(shù)
```
ulimit -n? ? ? ? ?#顯示最大打開文件數(shù)
ulimit -n? ? ? ? #修改最大打開文件數(shù)
```
第二種可能是沒有關(guān)閉http請(qǐng)求導(dǎo)致的,加上下面這句話
```
defer resp.Body.Close()
```
業(yè)務(wù)當(dāng)中有需要分發(fā)http.request.body的場(chǎng)景。比如微信回調(diào)消息只能指定一個(gè)地址,所以期望可以復(fù)制一份消息發(fā)給其他服務(wù)。由服務(wù)B和接收微信回調(diào)的服務(wù)A一起處理微信回調(diào)信息。
最開始考慮的是直接轉(zhuǎn)發(fā)http.request。使用 ReverseProxy 直接將http.request由服務(wù)A轉(zhuǎn)發(fā)給服務(wù)B。但是微信涉及到驗(yàn)證等問題,完全調(diào)整好非常麻煩。所以轉(zhuǎn)換思路,打算將http.request.body的內(nèi)容直接post給服務(wù)B。
可是http.request是readcloser。我們將http.request readAll的時(shí)候講無法再次讀取http.request里面的信息。
其中c表示的是http的上下文
1.我們先將body從http.request里面讀取出來,保存到一個(gè)變量里面。
2.然后再將變量里面的數(shù)據(jù)使用ioutil.NopCloser方法寫回到http.request里面。
NopCloser returns a ReadCloser with a no-op Close method wrapping the provided Reader r.
NopCloser用一個(gè)無操作的Close方法包裝Reader r返回一個(gè)ReadCloser接口。
這樣我們就可以再次使用c.request來進(jìn)行處理了。
golang復(fù)用http-request-body
當(dāng)前標(biāo)題:包含go語言中request的詞條
文章網(wǎng)址:http://www.chinadenli.net/article30/dddjipo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、網(wǎng)站內(nèi)鏈、動(dòng)態(tài)網(wǎng)站、虛擬主機(jī)、響應(yīng)式網(wǎng)站、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)