Сбой данных POST с использованием http.NewRequest - PullRequest
1 голос
/ 04 ноября 2019

Я пытаюсь передать данные из одной службы 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()

Я получил это от Golang: http.NewRequest POST

Когда я пытаюсь сбросить полученные данные из пользовательского сервиса:

    req.ParseForm()
    log.Println("Form values : ", req.Form)

Я получаю пустое значение map[]

Здесь я просто пытаюсь вставить интервал трассировки в свой запрос, ранее я использовал http.PostForm() для передачи данных, он работал отлично. Но я понятия не имею, передать ему tracing .

1 Ответ

4 голосов
/ 04 ноября 2019

Из документов для ParseForm :

[...] когда Content-Type не является application / x-www-form-urlencoded, тело запросане читается, и r.PostForm инициализируется с ненулевым пустым значением.

PostForm автоматически устанавливает тип содержимого, но теперь вы должны сделать это самостоятельно:

req, err := http.NewRequest("POST", userserviceUrl, strings.NewReader(form.Encode()))
// TODO: handle error
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
...