iPhone: возможно ли открыть файл, защищенный паролем, с помощью openURL? - PullRequest
0 голосов
/ 22 февраля 2010

Название в значительной степени говорит обо всем. Мое приложение содержит URL-адрес и пароль для файла myFile.ext, расположенного по адресу:

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

Я хочу создать объект NSURL, который, если он будет передан в методы canApenURL и openURL UIApplication, приведет к соответствующему поведению.

Возможно ли это? Если так, то как? И есть ли проблемы безопасности, о которых мне следует знать?

РЕДАКТИРОВАТЬ ДЛЯ УТОЧНЕНИЯ:

Следующий код создает 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 Ответ

1 голос
/ 22 февраля 2010

Предполагая (как указал @bodnarbm), что вы хотите HTTP-аутентификацию, это довольно просто. Просто реализуйте didReceiveAuthenticationChallenge. Вот пример из документации Apple:

Просто замените [selfferenceferencesName] и [selfferenceferencesPassword] на свое имя пользователя / pwd.

-(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];
    }
}

А вот и ссылка: http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html

UPDATE: Из вашего комментария выше не похоже, что вы используете HTTP-аутентификацию (поэтому мой код выше не относится к вам, но я оставлю это, чтобы, возможно, помочь кому-то еще).

Возвращаясь к вашей проблеме: Вы устанавливаете значение HTTP-заголовка метода в запросе? Почему вы пытаетесь отправить pwd в теле (как и POST), а остальные параметры в URL (как GET)? Переместите другие параметры в тело запроса POST. Если вы разместите свой код, вам будет легче увидеть, где вы идете не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...