Ответ 1
Вам нужно указать протокол для NewRequest, например. "http://", см. здесь.
req, err := http.NewRequest("GET", "http://mydomain.com", nil)
Я пытаюсь выполнить базовую HTTP-аутентификацию с помощью приведенного ниже кода, но он выдает следующую ошибку:
2013/05/21 10:22:58 Получите mydomain.com: неподдерживаемая схема протокола "" статус выхода 1
func basicAuth() string {
var username string = "foo"
var passwd string = "bar"
client := &http.Client{}
req, err := http.NewRequest("GET", "mydomain.com", nil)
req.SetBasicAuth(username, passwd)
resp, err := client.Do(req)
if err != nil{
log.Fatal(err)
}
bodyText, err := ioutil.ReadAll(resp.Body)
s := string(bodyText)
return s
}
Есть идеи, что я могу делать не так?
Вам нужно указать протокол для NewRequest, например. "http://", см. здесь.
req, err := http.NewRequest("GET", "http://mydomain.com", nil)
потенциальный "gotcha" - это если ваш сайт делает какие-либо переадресации... Go-lang выведет ваши указанные заголовки на перенаправления. (Мне нужно было сделать wirehark, чтобы это увидеть! Вы можете быстро узнать в хроме, щелкнув правой кнопкой мыши, затем "проверить элемент" и щелкнуть вкладку сети)
вы хотите определить функцию перенаправления, которая добавляет заголовок обратно.
func basicAuth(username, password string) string {
auth := username + ":" + password
return base64.StdEncoding.EncodeToString([]byte(auth))
}
func redirectPolicyFunc(req *http.Request, via []*http.Request) error{
req.Header.Add("Authorization","Basic " + basicAuth("username1","password123"))
return nil
}
func main() {
client := &http.Client{
Jar: cookieJar,
CheckRedirect: redirectPolicyFunc,
}
req, err := http.NewRequest("GET", "http://localhost/", nil)
req.Header.Add("Authorization","Basic " + basicAuth("username1","password123"))
resp, err := client.Do(req)
}