Я использую oauth2 для доступа к стороннему API. Я могу получить токен доступа в порядке, но когда я пытаюсь вызвать API, передав токер-носитель в заголовках запроса, он дает мне ошибку 401 (неавторизованный). Хотя он работает хорошо, когда я пытаюсь сделать это через POSTMAN, передавая заголовки как (Authorization: Bearer). Но он не работает, используя go.Невозможно передать токен-носитель в заголовках запроса GET в Голанге
Вот пример кода.
url := "http://api.kounta.com/v1/companies/me.json"
var bearer = "Bearer " + <ACCESS TOKEN HERE>
req, err := http.NewRequest("GET", url, nil)
req.Header.Add("authorization", bearer)
client := urlfetch.Client(context)
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
writer.Write([]byte(body)) // Gives 401 Unauthorized error, though same works using POSTMAN
Вы пытались использовать 'Set()' заголовок вместо 'Add()' ing? ['Добавить()'] (https://golang.org/pkg/net/http/#Header.Add) добавляет значения в существующий заголовок, тогда как ['Set()'] (https://golang.org /pkg/net/http/#Header.Set) перезапишет существующие заголовки. Также в соответствии с заголовками RFC поля нечувствительны к регистру, но некоторые языки (например, PHP) не знают об этом и будут искать «Авторизация» ... – Havelock
@Havelock: пакет goprotto goon canonicalizes всех заголовков, когда вы устанавливаете их. – JimB
@TahirRauf: вы посмотрели на заголовки, чтобы посмотреть, как их отправляют? – JimB