it-swarm.com.de

Grundlegende HTTP-Authentifizierung in Go

Ich versuche, die grundlegende HTTP-Authentifizierung mit dem folgenden Code durchzuführen, aber der folgende Fehler wird ausgegeben:

2013/05/21 10:22:58 Get mydomain.com: nicht unterstütztes Protokollschema "" Exit-Status 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
}

Irgendeine Idee, was ich falsch machen könnte?

43
leonsas

Sie müssen das Protokoll für NewRequest angeben, z. "http: //", siehe hier .

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

das potenzielle 'gotcha' ist, wenn Ihre Website Weiterleitungen durchführt ... Go-lang wird Ihre angegebenen Header auf den Weiterleitungen ablegen. (Ich musste Wireshark machen, um das zu sehen! Das kannst du schnell in chrome durch Rechtsklick auf "Element inspizieren" und Klick auf den Netzwerk-Reiter herausfinden.)

sie möchten eine Umleitungsfunktion definieren, die den Header wieder hinzufügt.

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