2010-12-08 20 views
3

Je construis un client iPhone qui va recevoir et poster un service REST. La partie GET fonctionne bien, mais je ne semble pas pouvoir POST rien. Le serveur n'accepte que xml pour le moment. J'ai essayé d'utiliser ASIHTTPRequest, ASIFormDataRequest et de le faire moi-même mais rien ne semble fonctionner. Quelqu'un peut-il m'aider? Je suis relativement nouveau à la programmation Objective-C.Problèmes liés à l'utilisation du service POST de l'iPhone au service REST

je reçois un code d'état: 200 en réponse à l'aide du code ci-dessous dans didReceiveResponse:

NSHTTPURLResponse * httpResponse;  
httpResponse = (NSHTTPURLResponse *) response; 
int myStatus = httpResponse.statusCode; 
if (myStatus == 400) { 
    NSLog(@"Status code: 400"); 
} else if (myStatus == 200) { 
    NSLog(@"Status code: 200"); 
} else { 
    NSLog(@"Other status code"); 

suit Voici trois approches différentes ...

Code (ASIHTTPRequest):

NSURL *url = [NSURL URLWithString:@"myUrl.com"]; 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request appendPostData:[@"<my xml>" dataUsingEncoding:NSUTF8StringEncoding]]; 
    // Default becomes POST when you use appendPostData:/appendPostDataFromFile:/setPostBody: 
    [request setRequestMethod:@"POST"]; 
    [request setDelegate:self]; 
    [request startSynchronous]; 

Code (ASIFormDataRequest):

NSURL *url = [NSURL URLWithString:@"someUrl.com"]; 
    ASIFormDataRequest *theRequest = [ASIFormDataRequest requestWithURL:url]; 
//  [theRequest setPostValue:@"" forKey:@"key1"]; 
    [theRequest setPostValue:@"90" forKey:@"key2"]; 
    [theRequest setPostValue:@"150" forKey:@"key3"]; 
    // [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:TRUE]; 
    [theRequest startAsynchronous]; 

Code (troisième méthode):

NSData *myPostData = [[NSString stringWithFormat:@"<my xml>"] dataUsingEncoding:NSUTF8StringEncoding];//NSASCIIStringEncoding]; 
//  NSString *xmlPostData = @"<my xml>"; 
    NSURL *theURL = [NSURL URLWithString:@"someUrl.com"]; 

    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:theURL]; 

    [theRequest setHTTPMethod:@"POST"]; 
    [theRequest setValue:@"application/xml; charset=utf-8" forHTTPHeaderField:@"Content-type"]; 
//  [theRequest setValue:@"UTF-8" forHTTPHeaderField:@"Charset"]; 
    [theRequest setHTTPBody:myPostData];// [xmlPostData dataUsingEncoding:NSUTF8StringEncoding]];// myPostData]; 

    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:TRUE]; 

Que diriez-vous tous ces - (void) connexion: fonctions de style? Certains d'entre eux doivent-ils contenir un code spécifique pour que la connexion fonctionne?

Un grand merci pour toute aide!

+0

Quel est exactement le problème? Si vous recevez un 200 alors le serveur a reçu la demande et a répondu. Manquez-vous le comportement sur le serveur ou sur le client? –

+0

est-ce que tout va bien avec votre service web reposant? Parce que tout sur l'iphone semble ok. – alecnash

+1

Je l'ai vraiment fait fonctionner maintenant. Je devais spécifiquement dire à ASIHTTPRequest quel type de contenu je voulais. Je pensais que ça trierait ça pour lui-même mais non ... Enfin merci pour vos commentaires les gars! Code de travail ci-dessous. – pbackvall

Répondre

2
NSURL *url = [NSURL URLWithString:@"http://myURL.com"]; 

ASIHTTPRequest *request = [ASIFormDataRequest requestWithURL:url]; 
NSData *myPostData = [[NSString stringWithFormat:@"<My XML Body>"] dataUsingEncoding:NSUTF8StringEncoding];//NSASCIIStringEncoding]; 
NSMutableData *myMutablePostData = [NSMutableData dataWithData:myPostData]; 

[request addRequestHeader:@"Content-Type" value:@"application/xml"]; 
[request setPostBody:myMutablePostData]; 
[request setDelegate:self]; 
[request startSynchronous];