web-dev-qa-db-ja.com

Goの基本的なHTTP認証

次のコードで基本的な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
}

私が間違っているかもしれないことは何ですか?

43
leonsas

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

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

潜在的な「落とし穴」は、Webサイトがリダイレクトを行う場合です... Go-langは指定されたヘッダーをリダイレクトにドロップします。 (これを確認するにはwiresharkを実行する必要がありました!chromeで右クリックして[要素を検査]をクリックし、[ネットワーク]タブをクリックすると、すぐに見つけることができます)

ヘッダーを再び追加するリダイレクト関数を定義する必要があります。

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)
}
50
pmerrell