Go에서 인증된 HTTP 클라이언트 요청
다음 코드 조각을 고려하세요.
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) }
여기서 문제는 두 번째 HTTP 호출이 401 액세스 거부로 인해 실패합니다. 오류가 발생했습니다.
왜 이런 일이 발생합니까?
첫 번째 요청에서 얻은 세션 쿠키가 두 번째 요청에 포함되어 있지 않기 때문입니다. 이 문제를 해결하려면 요청 전반에 걸쳐 쿠키를 저장하고 재사용하는 쿠키 항아리를 만들어야 합니다.
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] }
기본 기능에서:
jar := &myjar{} jar.jar = make(map[string] []*http.Cookie) client.Jar = jar
이러한 변경 사항을 통해 두 번째 요청은 서버에서 세부 정보를 성공적으로 인증하고 검색하는 데 필요한 쿠키가 있어야 합니다.
위 내용은 기본 인증을 사용하여 초기 인증 후 Go에서 후속 HTTP 요청을 어떻게 인증할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!