2010-02-22 3 views
0

제목은 거의 모든 것을 말합니다.iPhone : openURL을 사용하여 비밀번호로 보호 된 파일을 열 수 있습니까?

https://myserver.com/stuff.cgi?db=mydb

내가 UIApplication의 canOpenURL과의 OpenURL 방법에 전달되는 경우, 적절한 행동을 초래할 수있는 NSURL 객체를 만들려면 : 내 응용 프로그램에있는 파일 myFile.ext에 대한 URL과 비밀번호가 있습니다.

이것이 가능합니까? 그렇다면 어떻게? 그리고 제가 알아야 할 보안 문제가 있습니까? 명확한 설명

편집 :

다음 코드는 서버로 전송하면, 성공적으로 파일을 다운로드하는 응용 프로그램을 일으키는 URL 요청을 생성합니다. 그러나 내가하고 싶은 것은 openURL로 열면됩니다.

+ (NSMutableURLRequest *) requestForFileNamed: (NSString *) filename { 
    NSString *url = [NSString stringWithFormat:@"%@&user=%@&getbinfile=%@", serverLocation, username, filename]; 
    NSString *body = [NSString stringWithFormat:@"password=%@", password]; 
    return [XMLRequestBuilder postRequestWithURL:url body:body]; 
} 

XMLRequestBuilder 방법 : 가정

+ (NSMutableURLRequest *) requestWithURL: (NSString *) url body: (NSString *) body method: (NSString *) method { 
    NSURL * theURL = [NSURL URLWithString:url]; 
    NSMutableURLRequest * ret = [NSMutableURLRequest requestWithURL:theURL]; 
    [ret setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]]; 
    [ret setHTTPMethod: method]; 
    [ret setTimeoutInterval:kDefaultTimeoutInterval]; 
    return ret; 
} 


+ (NSMutableURLRequest *) postRequestWithURL: (NSString *) url body: (NSString *) body { 
    return [XMLRequestBuilder requestWithURL:url body:body method:@"POST"]; 
} 
+1

당신은 그 자체가 암호로 보호하거나, 웹 리소스가 암호 htaccess로 또는 유사한을 통해 보호됩니다되는 파일을 참조입니까? –

+0

저는이 분야에서 멍청한 사람입니다. . . 내가 말할 수있는 것은 다음 요청을 통해 파일을 다운로드 할 수 있다는 것입니다. URL은 https://myserver.com/stuff.cgi?db=mydb&user=myAccountID&getbinfile=filename.xml 몸은 암호입니다 = mypassword 방법은 당신이 내합니다 (NSMutableURLRequest가 생성 된 코드를 게시 할 수 POST –

+0

입니다 XMLRequestBuilder)? – cagreen

답변

1

(@bodnarbm이 지적한대로) 당신이 상당히 곧장 앞으로의 HTTP 인증을합니다. 단순히 didReceiveAuthenticationChallenge를 구현하십시오. 여기에 애플의 문서에서 예제는 다음과 같습니다

그냥 사용자 이름/비밀번호로 [자기 preferencesName] 및 [자기 preferencesPassword]을 변경합니다. http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html

가 UPDATE : 그 위에 당신의 코멘트에서 당신이 그렇게 위의 내 코드가 적용되지 않는 HTTP 인증 (사용하는 것처럼 보이지만하지 않는 나 '

-(void)connection:(NSURLConnection *)connection 
     didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
{ 
    if ([challenge previousFailureCount] == 0) { 
     NSURLCredential *newCredential; 
     newCredential=[NSURLCredential credentialWithUser:[self preferencesName] 
               password:[self preferencesPassword] 
               persistence:NSURLCredentialPersistenceNone]; 
     [[challenge sender] useCredential:newCredential 
       forAuthenticationChallenge:challenge]; 
    } else { 
     [[challenge sender] cancelAuthenticationChallenge:challenge]; 
     // inform the user that the user name and password 
     // in the preferences are incorrect 
     [self showPreferencesCredentialsAreIncorrectPanel:self]; 
    } 
} 

그리고 여기 링크입니다 다른 사람을 도울 가능성이 있음). 위로 문제에

: 당신은 요청에 'POST'에 HTTP 메소드 헤더 값을 설정하고 있는가? 왜 POST에서와 같이 pwd를 본문에 보내려고합니까? 다른 매개 변수는 URL에 있습니다 (GET과 같이)? 다른 매개 변수를 POST 요청 본문으로 이동하십시오. 코드를 게시하면 어디로 잘못 가고 있는지 쉽게 볼 수 있습니다.

+0

본인의 의지에 감사드립니다. 내가 사용하고있는 시스템은 인증 방법을 전환하는 과정에 있으며 이전 버전의 파일을 가져 오는 중임을 깨달았습니다. 따라서 코드를 게시하기 전에이 부분이 전환 될 때까지 기다려야합니다. 며칠이 걸릴 수 있습니다. 준비가되면 게시 할 것입니다. 고맙습니다. –

+0

코드가 위와 같이 표시되었습니다. –

관련 문제