我正在尝试使用将数据从一个golang服务传递到另一服务http.NewRequest()。为此,我使用了以下代码:
http.NewRequest()
httpClient := http.Client{} userserviceUrl := "http://user:7071/checkemail" form := url.Values{} form.Set("uuid", uuid) form.Set("email", email) b := bytes.NewBufferString(form.Encode()) req, err := http.NewRequest("POST", userserviceUrl, b) if err != nil { log.Println(err) } opentracing.GlobalTracer().Inject( validateEmailSpan.Context(), opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(req.Header)) resp, err := httpClient.Do(req) //_, err = http.PostForm("http://user:7071/checkemail", url.Values{"uuid": {uuid}, "email": {email}}) if err != nil { log.Println("Couldnt verify email address user service sends an error : ", err) } defer resp.Body.Close()
当我尝试转储从用户服务收到的数据时:
req.ParseForm() log.Println("Form values : ", req.Form)
我空了 map[]
map[]
在这里,我只是尝试将跟踪范围插入到我的请求中,以前我曾经使用http.PostForm()过传递数据,它可以完美工作。但是我不知道该tracing怎么做
http.PostForm()
tracing
从ParseForm的文档中:
[…]当Content-Type不是application / x-www-form- urlencoded时,不读取请求主体,并且r.PostForm初始化为一个非null的空值。
PostForm自动设置Content-Type,但是现在您必须自己进行设置:
req, err := http.NewRequest("POST", userserviceUrl, strings.NewReader(form.Encode())) // TODO: handle error req.Header.Set("Content-Type", "application/x-www-form-urlencoded")