func()

in pkg/common/http/manager.go [196:237]


func (hcm *HttpConnectionManager) buildTargetResponse(c *pch.HttpContext) {
	if c.LocalReply() {
		return
	}

	switch res := c.SourceResp.(type) {
	case *stdHttp.Response:
		//Merge header
		remoteHeader := res.Header
		for k := range remoteHeader {
			c.AddHeader(k, remoteHeader.Get(k))
		}
		//status code
		c.StatusCode(res.StatusCode)

		if http.IsSSEStream(res) {
			c.TargetResp = &client.StreamResponse{Stream: res.Body}
		} else {
			body, err := io.ReadAll(res.Body)
			if err != nil {
				panic(err)
			}
			//close body
			_ = res.Body.Close()
			c.TargetResp = &client.UnaryResponse{Data: body}
		}
	case []byte:
		c.StatusCode(stdHttp.StatusOK)
		if json.Valid(res) {
			c.AddHeader(constant.HeaderKeyContextType, constant.HeaderValueApplicationJson)
		} else {
			c.AddHeader(constant.HeaderKeyContextType, constant.HeaderValueTextPlain)
		}
		c.TargetResp = &client.UnaryResponse{Data: res}
	default:
		//dubbo go generic invoke
		response := util.NewDubboResponse(res, false)
		c.StatusCode(stdHttp.StatusOK)
		c.AddHeader(constant.HeaderKeyContextType, constant.HeaderValueJsonUtf8)
		c.TargetResp = response
	}
}