NSURLConnection, войдите, затем разместите изображение

Я пытаюсь загрузить изображение на свой веб-сайт со своего iPhone, но сначала мне нужно пройти аутентификацию.

Моя первая попытка заключалась в том, чтобы отправить HTTP-запрос Post с моими учетными данными с помощью NSMutableURLRequest, а затем отправить изображение аналогичным образом со вторым NSMutableURLRequest (в отдельном NSURLConnection). Но это не удалось, поскольку данные сеанса от входа до публикации изображения не сохранялись. У меня по-прежнему возникают ошибки аутентификации при втором запросе.

Я подумал, что буду умен и создам скрытый UIWebView и просто вызову [webview loadRequest:request]; для входа в систему, а затем отправлю изображение, где запрос имеет тип NSMutableURLRequest. Это отлично сработало, и теперь я могу загружать изображения на свой сайт ...

.... Однако, когда я попробовал свой iPod touch, я получил печально известный received memory warning, за которым следует сбой приложения, когда я вызываю [webview loadRequest:request];. Я выделяю только около 10 МБ памяти для всего приложения (спасибо профилировщику), так что я предполагаю, что это это не в самом запросе, а в том, как UIWebView его обрабатывает. Я думаю, что часть UIWebivew «просмотр» выделяет много памяти.

Вот мой вопрос: как мне сохранить данные сеанса и входа в систему между NSURLConnections, чтобы мне не приходилось использовать UIWebView?

псевдокод:

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
    [request setHTTPShouldHandleCookies:YES];
    [request setTimeoutInterval:180];
    [request setHTTPMethod:@"POST"];
    [ request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];

    NSURL* url = [[NSURL alloc]initWithString:@"http://website.com/login.php"];

     NSMutableData *body = [NSMutableData data];
    [body appendData:[@"username=me&password=password&" dataUsingEncoding:NSUTF8StringEncoding]];

    [request setHTTPBody:body];

    NSString *postLength = [NSString stringWithFormat:@"%d", [body length]];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];    

    [request setURL:url];

Потом:

    [self.webview loadRequest:request];

Or:

    NSURLConnection* connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    if (connection) {
        NSLog(@"Login Opened");
        responseData = [NSMutableData data];
    } else {
        NSLog(@"Logon failed");
        }

person Jason    schedule 29.10.2012    source источник


Ответы (1)


Аутентификация зависит от правильного функционирования файлов cookie. Похоже, вы используете loadRequest веб-представления для одного из своих запросов. Если вы просто используете NSURLConnection для обоих запросов, он должен правильно управлять чтением файла cookie из первого ответа и отправкой его во втором запросе от вашего имени. (См. Руководство по программированию системы загрузки URL-адресов. Если это по-прежнему не работает, возможно, проблема с настройками файлов cookie сеанса на вашем сервере.

person Kevin Borders    schedule 30.10.2012