Breve riassunto, il nostro sviluppatore precedente ha utilizzato ASIHTTPRequest per effettuare richieste POST e recuperare i dati dal nostro servizio web. Per ragioni sconosciute questa parte della nostra app ha smesso di funzionare. Sembrava un buon momento per le prove future e andare con AFNetworking. Il servizio web REST viene eseguito nel framework CakePHP.AFNetworking POST to REST webservice
In breve, non ricevo la stringa di risposta richiesta utilizzando AFNetworking.
So che il webservice funziona perché sono in grado di inviare correttamente i dati e ricevere la risposta corretta con ricciolo: ricciolo -d "di dati [modello] [Field0] = field0value dati & [Modello] [field1] = field1value" https://example.com/api/class/function.plist
Per le precedenti istruzioni per lo sviluppatore, ho trovato il seguente.
#import "AFHTTPRequestOperation.h"
…
- (IBAction)loginButtonPressed {
NSURL *url = [NSURL URLWithString:@"https://example.com/api/class/function.plist"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:[usernameTextField text] forHTTPHeaderField:@"data[User][email]"];
[request setValue:[passwordTextField text] forHTTPHeaderField:@"data[User][password]"];
AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc] initWithRequest:request] autorelease];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"operation hasAcceptableStatusCode: %d", [operation.response statusCode]);
NSLog(@"response string: %@ ", operation.responseString);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error: %@", operation.responseString);
}];
[operation start];
}
uscita: operazione hasAcceptableStatusCode: 200 stringa risposta: un file vuoto plist
tentata soluzione 1: AFNetworking Post Request la soluzione proposta utilizza una funzione di chiamata AFHTTPRequestOperation operationWithRequest. Tuttavia, quando cerco di utilizzare la soluzione, viene visualizzato un avviso "Metodo di classe" + operazioneWithRequest: completamento: "non trovato (il valore di default restituisce" id ""
Soluzione tentata 2: NSURLConnection. Output: I'm able per stampare il registro successo messaged ma non la stringa di risposta * aggiornamento -.. ritorna plist vuoto
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
NSString *httpBodyData = @"data[User][email][email protected]&data[User][password]=awesomepassword";
[httpBodyData dataUsingEncoding:NSUTF8StringEncoding];
[req setHTTPMethod:@"POST"];
[req setHTTPBody:[NSData dataWithContentsOfFile:httpBodyData]];
NSHTTPURLResponse __autoreleasing *response;
NSError __autoreleasing *error;
[NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&error];
// *update - returns blank plist
NSData *responseData = [NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil];
NSString *str = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSLog(@"responseData %@",str);
if (error == nil && response.statusCode == 200) {
// Process response
NSLog(@"success");//returns success code of 200 but blank
NSLog(@"resp %@", response);
} else {
// Process error
NSLog(@"error");
}
Ciao, Pouria, hai provato a utilizzare NSURLConnection per inviare una richiesta sincrona? – 8vius
tentato soluzione 2: è come ho provato NSURLConnection. – Airuop
Avete tutto sul lato server impostato correttamente? Come l'analisi delle estensioni, i layout per la risposta e le visualizzazioni per loro? Sembra più un problema del server che uno client. – 8vius