2011-07-21 10 views
0

J'ai une application pour iPhone que j'essaie d'obtenir pour parler à une extrémité arrière des rails. J'utilise NSMutableURLRequest pour extraire des données. Tous les appels fonctionnent correctement sur les requêtes GET, mais lorsque j'ai besoin de publier des données, l'application de mes rails ne semble pas pouvoir trouver la session. J'ai posté le code ci-dessous à la fois pour une demande get et une requête POST.NSMutableURLRequest perd des informations sur la session

C'est la requête 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"]; 

La demande get:

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]; 

Je suis à mon esprit fin ici pour essayer de savoir ce qui se passe de sorte que toute aide serait grandement appréciée .

Répondre

0

A fait face au même problème. Analyser les en-têtes de réponse pour l'en-tête Set-Cookie, extraire les cookies à la main, les renvoyer en tant que Cookie: en-tête lors de demandes ultérieures.

Si cela ne concerne que les sessions, vous n'avez pas à vous soucier de la persistance, du HTTPS, des domaines/chemins et autres.

EDIT: J'ai trouvé la classe NSHTTPCookieStorage. Voyez si cela peut être utile ...

+0

Donc, je comprends un peu ce que j'essaie de faire ici, mais j'ai l'impression qu'il me manque quelque chose, j'ai sorti le Set-Cookie dans une ficelle, stocké que dans un article de keychain, l'a repris sur la prochaine demande et l'a ajouté au champ d'en-tête http. Est-ce tout ce que j'ai besoin de faire, qu'est-ce que vous me dire par "extraire les cookies à la main"? – drapergeek

+0

À peu près. Aussi, voir modifier. –

+0

En fait, j'ai trouvé la même chose et j'ai essayé d'ajouter le cookie à cette en-tête, mais ça ne semble pas m'aider. – drapergeek

Questions connexes