上一章提到http打其他服務,不過原生的get post使用上有些許不便,因此在這邊介紹一個套件greq,
來方便去打http請求。
在使用greq時,需要另一個套件request worker:
worker := requestwork.New(50)
它可以產生greq用的worker,並從worker池中取出worker來處理http請求,接下來是建立greq物件:
Client := greq.New(worker, 2*time.Second, true)
第一個參數是剛剛建立的worker池,第二個參數是連線的timeout時間,第三個參數是要不要印log,
當使用greq進行請求時,如果印log設為true,就會幫你把連線資訊印出來,
像是tcp_connection和start_transfer的時間等等。
建立GET請求的方式如下:
userDataPara := url.Values{}
userDataPara.Add("user_id", "123")
response, httpStatus, err := Client.Get("http://127.0.0.1:7788/user_data", userDataPara)
if err != nil {
log.Println("err: ", err)
return
}
if httpStatus != 200 {
...
首先建立url.Values ,將參數加入裡面,再來帶入網址跟參數,就可以取得回應了,回應是[]byte型別,
要如何處理則看對方是傳什麼過來
通常內容有錯誤,會放在response內,err基本上都會是nil,
因此可以透過回傳的http status判別,只要不是200大都有問題。
由於一般post的方式跟get差不多這邊就先跳過,來說明傳遞json的方式,傳遞json的方法如下面範例:
userDataPara := &userPara{
UserID: "123",
UserName: "jim",
}
userDataJSON, err := json.Marshal(userDataPara)
if err != nil {
log.Println(err)
return
}
r := bytes.NewReader(userDataJSON)
Client.SetHeader("Content-Type", "application/json")
response, status, err := Client.PostRaw("http://127.0.0.1:7788/user_data", r)
if err != nil {
log.Println(err)
}
if status!= 200 {
.....
}
跟上一章的post 傳遞json方式類似,首先定義好struct並轉成json([]byte),
再轉成byte.Reader型別,並設定好header,用postraw方法傳出去,
就可以透過post 傳送json資料了。