iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 24
0

上一章提到http打其他服務,不過原生的get post使用上有些許不便,因此在這邊介紹一個套件greq
來方便去打http請求。

建立worker

在使用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

建立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 JSON

由於一般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資料了。


上一篇
Day23-http打其他服務
下一篇
Day25-壓力測試
系列文
從0開始的golang web server30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言