IPhone Сделать запрос POST, обработать cookie
Я надеюсь, что кто-то может пролить свет на следующее, я думаю, что с этим я направляюсь в правильном направлении. Я хочу войти на свой сервер с помощью комманды user/pass, тогда мне нужно будет сказать, если я правильно зарегистрировался (cookie должен быть удален), тогда я сделаю еще один запрос, если это так.
Любая помощь оценивается, heres код, с которым я работаю:
[[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..
Ответы
Ответ 1
Это должно работать:
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];
Ответ 2
Вот возможное решение с использованием вашего текущего кода:
1 - то, что вы делаете в начале, хорошо: обычно устанавливайте политику cookie.
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHttpCookieStorage];
[cookieStorage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
2 - После этого в ваших запросах вам нужно указать, что вы хотите использовать файлы cookie (чтобы ввести информацию о сеансе):
[request setHTTPShouldHandleCookies:YES];
Вам необходимо установить это поле для проверки подлинности и последующих запросов.