2012-07-17 2 views
0

J'ai essayé de suivre les instructions de ce poste iOS: how to perform a HTTP POST request? mais malheureusement, le serveur répond mais ne me donne aucune donnée. Le connection didReceiveResponse est appelé ainsi que le connectionDidFinishLoading sans erreur.HTTPRequête avec les paramètres POST sur iOS

Est-ce que je fais quelque chose de mal? J'ai testé le service avec Hurl.it et cela a fonctionné juste.

requestUrlString = une url normale,

postString = quelque chose comme "appId = 1 & last_update = 0"

responseData = [[NSMutableData alloc] initWithLength:0]; 

NSURL *baseURL = [NSURL URLWithString:[requestUrlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:baseURL]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:[NSString stringWithFormat:@"%d",[postString length]] forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]]; 

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]; 
[connection start]; 


- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    [responseData setLength:0]; 
    NSLog(@"Connection didReceiveResponse"); 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    [responseData appendData:data]; 
    NSLog(@"Connection didReceiveData"); 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    NSLog(@"Connection Error: %@", [error description]); 

    [[[UIAlertView alloc] initWithTitle:@"Error" 
           message:[error description] 
           delegate:nil 
         cancelButtonTitle:@"OK" 
         otherButtonTitles:nil] show]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSLog(@"Connection didFinishLoading"); 
    NSLog(@"data %@", [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]); 
} 

S'il vous plaît ne fait pas référence à ASIHTTP je suis arrivé la même chose ici.

////////////////////>: Je l'ai désolé de vous déranger avec mes problèmes. Le problème était le type d'encodage.

+1

Quels sont les symptômes? –

+0

Mon NSMutableData responseData par exemple est vide car la fonction didReceiveData n'est pas déclenchée. Donc la demande est réussie mais je ne reçois aucune donnée. – palme

+0

Je n'ai pas de solution complète pour vous, mais j'ai quelques idées. En regardant la différence entre votre code et le mien, le seul que je vois est que je ne définis pas Content-Length. Je suppose que si vous le définissez incorrectement, cela pourrait causer ce problème. Cela semble être long, mais je commencerais par supprimer cela. Aussi, je suggère de journaliser 'statusCode' dans votre' connectionDidFinishLoading'. Cela pourrait être inattendu. –

Répondre

0

Le service Web génère-t-il un corps de réponse? OU génère-t-il simplement l'en-tête de réponse? S'il n'y a pas de corps de réponse, il n'y a pas de réponse à afficher sur iOS.

Aussi, je crois que vous avez besoin d'un en-tête "Accepter".

+0

Le service Web génère un corps de réponse du type de contenu text/html. Application [request setValue: @ "/ x-www-form-urlencoded" forHTTPHeaderField: @ "Accepter"]; 'et' [request setValue: @ "application/json" forHTTPHeaderField: @ "Accepter"]; 'n'a pas corrigé il. Pardon. – palme

+0

En ce qui concerne le commentaire de @Steven ci-dessus (je n'ai pas assez de réputation pour commenter là). Si je vérifie les données de réponse sur un ordinateur Mac, j'utilise un client REST [disponible ici] (http://code.google.com/p/rest-client /). Bien que je préfère utiliser [Fiddler 2] (http://www.fiddler2.com/fiddler2/) qui fonctionne sur une machine Windows car il utilise le framework .NET – Steven

+0

Merci pour votre réponse, mais le problème était déjà résolu. – palme

Questions connexes