Я пытаюсь загрузить изображение на свой веб-сайт со своего 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");
}