2013-05-21 23 views
18

私は以下のコードで基本的なHTTP認証をやろうとしているが、それは次のエラーを投げている中:基本HTTP認証ゴー

2013年5月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 
} 

私が間違っていることができるものを任意のアイデア?

答えて

20

NewRequestのプロトコルを指定する必要があります。 "http://"、hereを参照してください。

req, err := http.NewRequest("GET", "http://mydomain.com", nil) 
17

あなたのウェブサイトは、任意のリダイレクトを行う場合には潜在的な「落とし穴は」です...行く-langのリダイレクトにご指定のヘッダーをドロップします。 (これを見るにはwiresharkを実行しなければなりませんでした!右クリックして「要素を検査」して「ネットワーク」タブをクリックすると、すぐにクロームで調べることができます)

ヘッダを追加するリダイレクト機能

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) 
} 
+7

非常に便利なヒント - 自分自身で同じ問題に走った。リダイレクト機能では、ヘッダ自体を設定するのではなく、 'req.SetBasicAuth(" username1 "、" password123 ")を実行することができます。 – mjturner