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.
Quels sont les symptômes? –
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
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. –