В настоящее время я пишу какое-то программное обеспечение в Go, которое взаимодействует с REST API. Конечная точка REST API, с которой я пытаюсь выполнить запрос, возвращает перенаправление HTTP 302 вместе с заголовком HTTP-местоположения, указывая на URI ресурса.
Я пытаюсь использовать мой Go script, чтобы захватить заголовок HTTP-адреса для последующей обработки.
Вот что я сейчас делаю для достижения этой функциональности в настоящее время:
package main
import (
"errors"
"fmt"
"io/ioutil"
"net/http"
)
var BASE_URL = "https://api.stormpath.com/v1"
var STORMPATH_API_KEY_ID = "xxx"
var STORMPATH_API_KEY_SECRET = "xxx"
func noRedirect(req *http.Request, via []*http.Request) error {
return errors.New("Don't redirect!")
}
func main() {
client := &http.Client{
CheckRedirect: noRedirect
}
req, err := http.NewRequest("GET", BASE_URL+"/tenants/current", nil)
req.SetBasicAuth(STORMPATH_API_KEY_ID, STORMPATH_API_KEY_SECRET)
resp, err := client.Do(req)
// If we get here, it means one of two things: either this http request
// actually failed, or we got an http redirect response, and should process it.
if err != nil {
if resp.StatusCode == 302 {
fmt.Println("got redirect")
} else {
panic("HTTP request failed.")
}
}
defer resp.Body.Close()
}
Это кажется для меня чем-то вроде взлома. Переопределяя функцию http.Client
CheckRedirect
, я по существу вынужден рассматривать HTTP-перенаправления как ошибки (которых они не являются).
Я видел несколько других мест, предлагающих использовать HTTP-транспорт вместо HTTP-клиента, но я не уверен, как это сделать, поскольку мне нужен HTTP-клиент, поскольку мне нужно использовать HTTP Basic Auth для связи с этим API REST.
Может ли кто-нибудь из вас рассказать мне, как сделать HTTP-запросы с базовой аутентификацией - в то время как не следовать переадресации - это не связано с ошибками с ошибками и обработкой ошибок?
Спасибо.