Если этого можно избежать, вы не должны помещать конфиденциальные данные, такие как секрет клиента, в строку URL. Это менее безопасно, чем использование тела сообщения: например, оно может быть зафиксировано в журналах и аналитике трафика сайта, которые в конечном итоге будут переданы третьим лицам.
Вместо этого выполните POST с телом JSON:
type TokenRequest struct {
GrantType string `json:"grant_type"`
ResponseType string `json:"response_type"`
ClientID string `json:"client_id"`
ClientSecret string `json:"client_secret"`
}
tokenReq := &TokenRequest{
GrantType: grantType,
ResponseType: responseType,
ClientID: clientID,
ClientSecret: clientSecret,
}
body, err := json.Marshal(tokenReq)
if err != nil {
log.Errorf("Failed to marshal request body: %s", err)
}
req, err := http.NewRequest("POST", url, bytes.NewBuffer(body))
if err != nil {
log.Errorf("Failed to create request: %s", err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Accept", "application/json")
res, err := httpClient.Do(req)
Обновление
OP теперь получает ответ с кодом состояния 401. 401 не авторизован. Вам, вероятно, нужно пройти аутентификацию в API. Например, если у вас есть токен на предъявителя, добавьте заголовок для него перед выполнением запроса:
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", bearer))