나는 web.xml에서 다이제스트 인증으로 보안 처리 한 솔라 서버를 가지고 있으며 자바에서 solr을 호출해야한다. 오늘 많은 수의 실을 읽고 많은 예를 들었지만 운이 없었습니다.아파치 httpcomponents 다이제스트 인증 실패, 오래된 httpclient 작동
이 코드는 commons-httpclient 3.1과 작동하며 200 OK입니다.
URL url = new URL(solrUrl);
HttpClient httpClient = new HttpClient(new MultiThreadedHttpConnectionManager());
httpClient.getState().setCredentials(new AuthScope(url.getHost(), url.getPort(), AuthScope.ANY_SCHEME),
new UsernamePasswordCredentials(user, password));
HttpMethod method = new GetMethod(solrUrl);
int responseCode = httpClient.executeMethod(method);
System.out.println(responseCode);
하지만 아파치 httpcomponent로 수행하려고 할 때 4.2.2 나는 항상 401 권한이 없습니다. 이것은 공식적인 예와 거의 동일합니다.
DefaultHttpClient httpclient = null;
try
{
URL url = new URL(solrUrl);
HttpHost targetHost = new HttpHost(url.getHost(), url.getPort(), url.getProtocol());
httpclient = new DefaultHttpClient();
UsernamePasswordCredentials creds = new UsernamePasswordCredentials(user, password);
httpclient.getCredentialsProvider().setCredentials(
new AuthScope(targetHost.getHostName(),targetHost.getPort()),
creds);
HttpGet httpget = new HttpGet(solrUrl);
HttpResponse response = httpclient.execute(targetHost,httpget);
HttpEntity entity = response.getEntity();
System.out.println(response.getStatusLine());
EntityUtils.consume(entity);
httpget.releaseConnection();
} catch (ClientProtocolException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
} finally
{
httpclient.getConnectionManager().shutdown();
}
또한 HttpUrlConnection을 사용하여 동일한 401을 얻으려고 시도했습니다.
Authenticator authenticator = new Authenticator()
{
protected PasswordAuthentication getPasswordAuthentication()
{
PasswordAuthentication pa = new PasswordAuthentication(user, password.toCharArray());
System.out.println("calling solr with user:pass " + pa.getUserName() + ":******");
return pa;
}
};
Authenticator.setDefault(authenticator);
try
{
URL url = new URL(solrUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("type", "submit");
conn.setDoOutput(true);
conn.connect();
System.out.println(conn.getResponseCode());
conn.disconnect();
} catch (MalformedURLException mue)
{
mue.printStackTrace();
} catch (IOException ioe)
{
ioe.printStackTrace();
} catch (Exception e)
{
e.printStackTrace();
}
나는
어떤 도움 .. 내가 포기하는 과정에있어, 때문에 클래스 경로 문제의 아파치 httpcomponents 4를 사용하려면?
감사합니다. 나는 지난 2 일 동안 이것을 강조했다. 내가 필요한 모든 것은 최신 바람둥이를 얻는 것이었다. – hajime