2011-05-12 4 views
1

, 또는 iOS에서 나는 양식을 그냥 작동Android의 URL에서 http 인증 정보를 어떻게 사용할 수 있습니까? 브라우저에서

http://myUser:[email protected]/secure/area/index.html 

에서 인코딩 된 HTTP 인증 정보가있는 URL의 내용을 얻을 때. 웹 서비스에서 URL을 가져오고 있습니다. 도움이 될만한 경우 HTTP 인증 정보를 파싱하려고하지 않는 것이 좋습니다. 실제로 URL을 구문 분석하지 않고도 Android에서 비슷한 작업을 수행 할 수 있습니까? 또는 그것에 대해 가장 좋은 방법은 무엇입니까?

업데이트 : 인증 헤더에 인증 정보를 설정하려고하면 매우 이상한 FileNotFoundException이 발생합니다. 여기

내가 사용하고 코드의 : 모든 정보를 체크 아웃 것으로 보인다

 URL url = new URL(urlString); 
     URLConnection connection; 
     String authority = url.getAuthority(); 
     if (authority.contains("@")) { 
      String userPasswordString = authority.split("@")[0]; 
      url = new URL(urlString.replace(userPasswordString + "@", "")); 
      connection = url.openConnection(); 
      String encoded = new String(Base64.encode(userPasswordString.getBytes(), Base64.DEFAULT), "UTF-8"); 
      connection.setRequestProperty("Authorization", "Basic " + encoded); 
     } else { 
      connection = url.openConnection(); 
     } 

     InputStream responseStream = connection.getInputStream(); 

, 나는 URL이 정확한지 확인한, base64로 문자열이 올바른지, 파일 서버에 확실히 - 파이어 폭스에서 열어도 전혀 문제가 없습니다. 파이어 버그는 제가 말할 수있는 한 내가 보낸 것과 일치하는 모든 적절한 헤더를 보여줍니다. 내가 생각 얻을 것은 다음과 같은 오류 (URL 호스트가 무죄를 보호하기 위해 변경)입니다 :

java.io.FileNotFoundException: http://a1b.example.com/grid/uploads/profile/avatar/user1/custom-avatar.jpg 
    at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1061) 

어떤 생각이 무엇인지,이 모든에 대해 무엇입니까?

HttpClient를 사용하여 보았지만 Issue 16041에서 URLConnection을 사용하는 것이 좋습니다.

답변

2

브라우저에서 URL을 구문 분석하는 데 추가 규칙이 적용된 것 같습니다. Android에서는 BASIC 및 DIGEST와 같은 HTTP 클라이언트의 인증 메커니즘을 사용하여 동일한 작업을 수행 할 수 있습니다. 어떤 서버를 선택 하느냐는 인증을 시도하는 서버에 따라 다릅니다.

Here is a good page 시작하기.

+0

업데이트 된 질문 –

1

안타깝게도 Android에서는 해당 형식의 사용자 정보 (사용자 이름/비밀번호)를 java.net.URL 또는 HttpClient에 전달하여 브라우저에서와 같이 작동시킬 수 없습니다.

이렇게하려면 URI (http://download.oracle.com/javase/1.5.0/docs/api/index.html?java/net/URI.html 참조)를 사용하는 것이 좋습니다. String을 사용하는 URI 생성자에 URL을 전달한 다음 사용자 정보를 추출 할 수 있습니다 (getUserInfo() 사용). 그런 다음 HttpClient의 인증 클래스 (http://developer.android.com/reference/org/apache/http/auth/package-summary.html 참조)를 사용하거나 기본 인증 헤더를 직접 구성 할 수 있습니다 (예 : http://www.avajava.com/tutorials/lessons/how-do-i-connect-to-a-url-using-basic-authentication.html).

+0

업데이트 된 질문 –

관련 문제