다이제스트 인증을 위해 샘플 Apache hc (http 클라이언트)를 실행하고 있습니다.Apache HTTP 클라이언트 샘플이 다이제스트 인증에 실패했습니다.
public static void main(String[] args) throws Exception {
HttpHost target = new HttpHost("httpbin.org", 80, "http");
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
new AuthScope(target.getHostName(), target.getPort()),
new UsernamePasswordCredentials("user", "passwd"));
CloseableHttpClient httpclient = HttpClients.custom()
.setDefaultCredentialsProvider(credsProvider)
.build();
try {
// Create AuthCache instance
AuthCache authCache = new BasicAuthCache();
// Generate DIGEST scheme object, initialize it and add it to the local
// auth cache
DigestScheme digestAuth = new DigestScheme();
// Suppose we already know the realm name
digestAuth.overrideParamter("realm", "[email protected]");
// Suppose we already know the expected nonce value
digestAuth.overrideParamter("nonce", "b2c603bb7c93cfa197945553a1044283");
authCache.put(target, digestAuth);
// Add AuthCache to the execution context
HttpClientContext localContext = HttpClientContext.create();
localContext.setAuthCache(authCache);
HttpGet httpget = new HttpGet("http://httpbin.org/digest-auth/auth/user/passwd");
System.out.println("Executing request " + httpget.getRequestLine() + " to target " + target);
for (int i = 0; i < 3; i++) {
CloseableHttpResponse response = httpclient.execute(target, httpget, localContext);
try {
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
System.out.println(EntityUtils.toString(response.getEntity()));
} finally {
response.close();
}
}
} finally {
httpclient.close();
}
}
그리고 나는 점점 오전 : 난 그냥 제공된 샘플을 사용하여, 아무것도 변경하지 않은 HTTP를/1.1 401 권한
다음 제공 사용자/passwd에 나를하라는 메시지를 표시하고 내가이 http://httpbin.org/digest-auth/auth/user/passwd에 직접 갈 경우그 페이지. 그래서 웹 사이트가 올바르게 작동합니다.
어떤 아이디어가 잘못 되었나요? 최신 버전의 라이브러리가 있습니다. (성공) 브라우저
피들러 인증 :
없음 프록시 인증 헤더가 존재합니다.
인증 헤더 존재한다 : 다이제스트 이름 = "사용자"= "[email protected]"난스 = "8ada87344eb5a10bf810bcc211205c24" 영역, URI = "/ 다이제스트 인증/인증/사용자/passwd에" 응답 = "ad22423e5591d14c90c6fe3cd762e64c" 불투명 = "361645844d957289c4c8f3479f76269f", QOP = 인증, NC = 00000001, cnonce = "260d8ddfe64bf32e"
피들러 인증 내 코드 (실패) :
프록시 없음 - 인증 헤더가 있음.
인증 헤더가 : 다이제스트 이름 = "사용자"= "[email protected]"난스 = "76af6c9c0a1f57ee5f0fcade2a5f758c" 영역, URI = "http://httpbin.org/digest-auth/auth/사용자/passwd에 " 응답 ="745686e3f38ab40ce5907d41f91823e6 ", QOP = 인증, NC = 00000001, cnonce ="634b618d5c8ac9af ", 알고리즘 = MD5, 불투명 ="fe84ce11c48a7b258490600800e5e6df "
프로그래밍 방식으로 영역을 어떻게 결정합니까? 이 코드는 여러 서버에 연결되는 많은 컴퓨터에서 실행되는 라이브러리 용 코드입니다. 그래서 나는 그것을 하드 코딩 할 수 없다. –