Próbuję użyć Apache/Jakarta HttpClient 4.1.1 do połączenia się z dowolną stroną internetową przy użyciu podanych poświadczeń. Aby to przetestować, mam minimalną instalację IIS 7.5 na mojej maszynie dev, gdzie działa tylko jeden tryb uwierzytelniania na raz. Uwierzytelnianie podstawowe działa dobrze, ale Digest i zwrot 401 komunikaty o błędach NTLM gdy próbuję się zalogować Oto mój kod.HttpClient 4.1.1 zwraca 401 podczas uwierzytelniania za pomocą NTLM, przeglądarki działają dobrze
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpget = new HttpGet("http://localhost/");
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY,
new NTCredentials("user", "password", "", "localhost"));
if (!new File(System.getenv("windir") + "\\krb5.ini").exists()) {
List<String> authtypes = new ArrayList<String>();
authtypes.add(AuthPolicy.NTLM);
authtypes.add(AuthPolicy.DIGEST);
authtypes.add(AuthPolicy.BASIC);
httpclient.getParams().setParameter(AuthPNames.PROXY_AUTH_PREF,
authtypes);
httpclient.getParams().setParameter(AuthPNames.TARGET_AUTH_PREF,
authtypes);
}
localContext.setAttribute(ClientContext.CREDS_PROVIDER, credsProvider);
HttpResponse response = httpclient.execute(httpget, localContext);
System.out.println("Response code: " + response.getStatusLine());
Jedna rzecz zauważyłem w Skrzypek jest to, że hashe wysłane przez Firefoksa versus przez HttpClient są różne, dzięki czemu myślę, że być może IIS 7.5 spodziewa się silniejszego mieszania niż zapewnia HttpClient? Jakieś pomysły? Byłoby wspaniale, gdybym mógł sprawdzić, czy to zadziała z NTLM. Digest też byłby fajny, ale w razie potrzeby mogę żyć bez niego.
Mam uwierzytelnianie Digest do pracy w przeglądarkach, ale nadal pokazuje 401 zabronione w HttpClient. Jestem zdumiony. – Jesse
Kod działa dla mnie, jednak jest przestarzały w 4.3. Nie mogę znaleźć jasnego przewodnika na temat używania czystego kodu 4.3. – Paul