NSMutableURLRequest теряет информацию о сеансе

У меня есть приложение для iphone, которое я пытаюсь заставить поговорить с серверной частью rails. Я использую NSMutableURLRequest для передачи данных туда и обратно. Все вызовы отлично работают с запросами GET, но когда мне нужно опубликовать данные, мое приложение rails, похоже, не может найти сеанс. Я разместил код ниже как для запроса get, так и для запроса POST.

Это POST-запрос:

//Set up the URL
NSString *url_string = [NSString stringWithFormat:@"https://testserver.example.com/players.xml"];
NSURL *url = [NSURL URLWithString:url_string];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                         cachePolicy:NSURLRequestReloadIgnoringCacheData 
                                     timeoutInterval:30];

//To create an object in rails
//We have to use a post request
////This is the format when using xml
NSString *requestString = [[NSString alloc] initWithFormat:@"<player><team_game_id>%@</team_game_id><person_id>%@</person_id></player>", game, person];


NSData *requestData = [NSData dataWithBytes:[requestString UTF8String] length:[requestString length]];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:requestData];
NSString *postLength = [NSString stringWithFormat:@"%d", [requestData length]];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];

//For some reason rails will not take application/xml
[request setValue:@"application/xml" forHTTPHeaderField:@"content-type"];

Запрос на получение:

NSString *url_string = [NSString stringWithFormat:@"https://testserver.example.com/people/find_by_passport?passport=%i", passport];
passportString = [[NSMutableString alloc] initWithFormat:@"%i", passport];
NSLog(@"The passport string is %@", passportString);

NSLog(url_string, nil);
NSURL *url = [NSURL URLWithString:url_string];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                         cachePolicy:NSURLRequestReloadIgnoringCacheData 
                                     timeoutInterval:30];

Я в своем уме, пытаясь выяснить, что происходит, поэтому любая помощь будет БОЛЬШОЙ оценена.


person drapergeek    schedule 21.07.2011    source источник


Ответы (1)


Столкнулся с той же проблемой. Проанализируйте заголовки ответа для заголовка Set-Cookie, извлеките файлы cookie вручную, передайте их обратно как заголовок Cookie: при последующих запросах.

Если речь идет только о сеансах в их простейшем виде, вам не нужно беспокоиться о постоянстве, HTTPS, доменах/путях и тому подобном.

РЕДАКТИРОВАТЬ: я нашел класс NSHTTPCookieStorage. Посмотрим, может поможет...

person Seva Alekseyev    schedule 21.07.2011
comment
Итак, я в некоторой степени понимаю, что я пытаюсь здесь сделать, но я чувствую, что что-то упускаю, я вытащил Set-Cookie в строку, сохранил ее в элементе цепочки для ключей, снова взял ее на следующем запрос и добавил его в поле заголовка http. Это все, что мне нужно сделать, что вы имеете в виду под извлечением файлов cookie вручную? - person drapergeek; 21.07.2011
comment
На самом деле я нашел то же самое и попытался добавить файл cookie обратно в этот заголовок, но, похоже, это мне не помогает. - person drapergeek; 21.07.2011