iPhone сделать запрос POST, обрабатывать cookie - PullRequest
11 голосов
/ 02 ноября 2009

Я надеюсь, что кто-то может пролить некоторый свет на следующее, я думаю, что я иду в правильном направлении с этим. Я хочу войти на свой сервер с помощью комманды user / pass, затем я должен иметь возможность сказать, что если я вошел в систему правильно (файл cookie должен быть удален), то я сделаю еще один запрос, если это так.

Любая помощь приветствуется, вот код, с которым я работаю:

[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];

NSString *post =[NSString stringWithFormat:@"name=%@&pass=%@",@"foo", @"bar"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:@"http://www.mywebserver.com/login.php"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];

NSError *error;
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(data);

// HOW to Check if there was a Cookie dropped??


// Make another request..

Ответы [ 2 ]

10 голосов
/ 02 ноября 2009

Это должно работать:

NSDictionary *headerFields = [(NSHTTPURLResponse*)response allHeaderFields]; 
NSURL *url = [NSURL URLWithString:@"http://www.mywebserver.com/login.php"];   
NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:headerFields forURL:url];

Тогда вы можете узнать, содержит ли массив cookies нужный файл cookie.

Вы также можете позвонить после получения ответа:

NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:url];
3 голосов
/ 14 сентября 2010

Вот возможное решение, используя ваш текущий код:

1 - То, что вы делаете в начале, хорошо: установка политики использования файлов cookie в целом.

NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHttpCookieStorage];
[cookieStorage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];

2 - После этого в ваших запросах необходимо указать, что вы хотите использовать куки (для ввода информации о сеансе):

[request setHTTPShouldHandleCookies:YES];

Вам необходимо установить это поле для аутентификации и последующих запросов.

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