使用http.NewRequest的POST数据失败

我正在尝试使用将数据从一个golang服务传递到另一服务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[]

在这里,我只是尝试将跟踪范围插入到我的请求中,以前我曾经使用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")

以上是 使用http.NewRequest的POST数据失败 的全部内容, 来源链接: utcz.com/qa/429349.html

回到顶部