Authentifizierte HTTP-Client-Anfragen von Go
Bedenken Sie den folgenden Codeausschnitt:
client := &http.Client{} /* Authenticate */ req, err := http.NewRequest("GET", "http://164.99.113.32/Authenticate", nil) req.SetBasicAuth("<username>", "<password>") resp, err := client.Do(req) if err != nil { fmt.Printf("Error : %s", err) } /* Get Details */ req.URL, _ = url.Parse("http://164.99.113.32/Details") resp, err = client.Do(req) if err != nil { fmt.Printf("Error : %s", err) }
Das Problem hier ist, dass Der zweite HTTP-Aufruf schlägt mit der Fehlermeldung 401 „Zugriff verweigert“ fehl.
Warum passiert das?
Der Grund dafür ist, dass die zweite Anfrage das vorhandene Sitzungscookie nicht enthält erhalten Sie bei der ersten Anfrage. Um dieses Problem zu lösen, müssen wir eine Keksdose erstellen, um Cookies über Anfragen hinweg zu speichern und wiederzuverwenden.
type myjar struct { jar map[string] []*http.Cookie } func (p* myjar) SetCookies(u *url.URL, cookies []*http.Cookie) { fmt.Printf("The URL is : %s\n", u.String()) fmt.Printf("The cookie being set is : %s\n", cookies) p.jar [u.Host] = cookies } func (p *myjar) Cookies(u *url.URL) []*http.Cookie { fmt.Printf("The URL is : %s\n", u.String()) fmt.Printf("Cookie being returned is : %s\n", p.jar[u.Host]) return p.jar[u.Host] }
In der Hauptfunktion:
jar := &myjar{} jar.jar = make(map[string] []*http.Cookie) client.Jar = jar
Mit diesen Änderungen wird die zweite Anfrage Sie verfügen über das erforderliche Cookie, um sich erfolgreich zu authentifizieren und die Details vom Server abzurufen.
Das obige ist der detaillierte Inhalt vonWie kann ich nach einer ersten Authentifizierung mit der Basisauthentifizierung nachfolgende HTTP-Anfragen in Go authentifizieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!