Невозможно отправить JSON в качестве тела для HTTP POST-запроса в GO Всегда возвращают 400 Ошибка и 5035 Код? - PullRequest
0 голосов
/ 22 марта 2020

Я хочу отправить JSON HTTP-запрос к API, но он возвращает ошибку 400 Bad Request и 5035 Code (Invalid Form Body). Мне нужна помощь, чтобы это исправить! это мой код:

func creator() {

    api := "https://discordapp.com/api/v6/auth/register"

    //adding the Transport object to the http Client
    client := &http.Client{
        Timeout: time.Second * 5,
    }

    username, email, password := "Alpha", "Aplhpax@gmail.com", "Alpha123"


    url, err := url.Parse(api)
    if err != nil {
        fmt.Println(err)
    }



    body := []byte(`{"fingerprint":"` + "3s5dfsdf5461sdfaFD2hfd" + `","email":"` + email + `","username":"` + username + `","password":"` + password + `"}`)

    req, err := http.NewRequest("POST", url.String(), bytes.NewBuffer(body))

    if err != nil {
        fmt.Println(err)
    }
    req.Header.Set("Accept", "*/*")
    req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36")

    resp, err := client.Do(req)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(resp.Status)
    //getting the response
    data, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(string(data))
}

Вывод:

{"message": "Недопустимое тело формы", "code": 50035}


Код статуса:

400 Плохой запрос


1 Ответ

0 голосов
/ 22 марта 2020

Вот пример формы, которую я написал для API SonarCloud.

// Create Project(Project)
//   Create a new SonarCloud project usinig p
//   Note SonarCloud expects application/x-www-form-urlencoded
func (c *SonarCloudClient) CreateProject(p NewProject) (*http.Response, error) {

    data := url.Values{}
    data.Set("name", p.Name)

    // Project names for none default organization are global
    // Add a prefix to avoid naming conflicts
    // TODO: Make this configurable by the end user
    data.Set("project", KeyPrefix+p.Project)
    data.Set("organization", p.Organization)
    data.Set("visibility", p.Visibility)

    url := c.URI + ProjectCreate
    req, err := http.NewRequest("POST", url, strings.NewReader(data.Encode()))
    if err != nil {
        return HandleHTTPClientError(nil, err)
    }

    req.Header.Add(contentType, wwwForm)
    req.Header.Add(contentLength, strconv.Itoa(len(data.Encode())))
    rsp, err := c.Client.Do(req)

    if err != nil {
        return HandleHTTPClientError(rsp, err)
    }

    if rsp.StatusCode == 400 {
        errmsg, _ := ioutil.ReadAll(rsp.Body)
        return rsp, errors.New(string(errmsg))
    }

    return rsp, nil
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...