2012-05-07 2 views
13

입니다. Java를 사용하여 XML 형식으로 표시를 반환하는 HTTPS 사이트에 액세스합니다. URL 자체에 로그인 자격 증명을 전달합니다.서버에서 HTTP 응답 코드를 반환했습니다. URL은 https :

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = dbf.newDocumentBuilder(); 
requestURL = "https://Administrator:[email protected]:8443/abcd"; 

try { 
     InputStream is = null; 
     URL url = new URL(requestURL); 
     InputStream xmlInputStream =new URL(requestURL).openConnection().getInputStream(); 
     byte[] testByteArr = new byte[xmlInputStream.available()]; 
     xmlInputStream.read(testByteArr); 
     System.out.println(new String(testByteArr)); 
     Document doc = db.parse(xmlInputStream); 
     System.out.println("DOC="+doc); 
    } catch (MalformedURLException e) { 
    } 

내가/서명 인증서를 서명의 유효성을 검사하지 않는 프로그램에서 트러스트 매니저를 만드는거야 : 여기에 코드입니다. 그러나 위의 프로그램을 실행하면 오류가 발생합니다. 서버에서 HTTP 응답 코드 : 401을 반환했습니다. URL은 https://Administrator:[email protected]:8443/abcd입니다.

브라우저에서 동일한 URL을 사용할 수 있으며 XML이 올바르게 표시됩니다. Java 프로그램 내에서이 작업을 수행하는 방법을 알려주십시오.

답변

24

401은 "인증되지 않음"을 의미하므로 자격 증명이 있어야합니다.

자바 URL이 표시하는 구문을 지원하지 않는다고 생각합니다. 인증자를 대신 사용할 수 있습니다.

Authenticator.setDefault(new Authenticator() { 

    @Override 
    protected PasswordAuthentication getPasswordAuthentication() {   
     return new PasswordAuthentication(login, password.toCharArray()); 
    } 
}); 

그런 다음 자격 증명없이 일반 URL을 호출하면됩니다.

다른 옵션은 헤더의 자격 증명을 제공하는 것입니다

String loginPassword = login+ ":" + password; 
String encoded = new sun.misc.BASE64Encoder().encode (loginPassword.getBytes()); 
URLConnection conn = url.openConnection(); 
conn.setRequestProperty ("Authorization", "Basic " + encoded); 

PS : 그것은 그 Base64Encoder를 사용하지 않는 것이 좋습니다 그러나 이것은 빠른 솔루션을 보여주기 위해 단지이다. 이 솔루션을 유지하려면 라이브러리가 필요합니다. 많이 있습니다.

+1

감사 기욤 폴렛를 가져옵니다. 두 번째 옵션은 매력처럼 작동했습니다. 내부 테스트만으로 충분하므로 충분하다고 생각합니다. – Vish

+1

Polet에게 감사드립니다. 두 번째 옵션은 나를 도왔다. –

1

시도해보십시오. 서버가 유효한 사용자를 알 수있게하려면 인증을 통과해야합니다. 이 두 패키지를 가져와야하고 jersy jar를 포함해야합니다. 당신이 jersy 단지를 포함 할 해달라고 경우,이 패키지를 다음

import sun.misc.BASE64Encoder; 

import com.sun.jersey.core.util.Base64; 
import sun.net.www.protocol.http.HttpURLConnection; 

하고,

String encodedAuthorizedUser = getAuthantication("username", "password"); 
URL url = new URL("Your Valid Jira URL"); 
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection(); 
httpCon.setRequestProperty ("Authorization", "Basic " + encodedAuthorizedUser); 

public String getAuthantication(String username, String password) { 
    String auth = new String(Base64.encode(username + ":" + password)); 
    return auth; 
} 
관련 문제