Krótka fabuła, nasz poprzedni programista użył ASIHTTPRequest, aby wysyłać żądania POST i pobierać dane z naszego serwisu. Z nieznanych przyczyn ta część naszej aplikacji przestała działać. Wydawało się, że jest wystarczająco dobry czas na przyszłe dowody i udać się z AFNetworking. Usługa sieciowa REST działa na strukturze CakePHP.AFNetworking POST to REST webservice
W skrócie nie otrzymuję łańcucha odpowiedzi żądania za pomocą AFNetworking.
wiem, że usługa działa, ponieważ jestem w stanie z powodzeniem dodawać dane i otrzymać właściwą odpowiedź za pomocą curl: curl -d "danych [modelu] [field0] = field0value & danych [model] [pole1] = field1value" https://example.com/api/class/function.plist
Zgodnie z instrukcjami poprzedniego programisty wymyśliłem następujące.
#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];
}
wyjściowa: operacja hasAcceptableStatusCode: 200 odpowiedź ciąg: pusty plik plist
próbowali rozwiązanie 1: AFNetworking Post Request proponowane rozwiązanie wykorzystuje funkcją AFHTTPRequestOperation nazywa operationWithRequest. Jednak, gdy próbuję użyć tego rozwiązania, otrzymuję ostrzeżenie "Metoda klasy" + operacjaWitądanie: zakończenie: "nie znaleziono (typ powrotu domyślnie jest" id ""
próbowano rozwiązania 2: NSURLConnection output: Jestem w stanie wydrukować protokół sukces messaged ale nie ciąg odpowiedź * Update -.. powraca pusty plist
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");
}
Witaj, Pouria, czy próbowałeś użyć NSURLConnection, aby wysłać synchroniczne żądanie? – 8vius
próbowano rozwiązania 2: jak próbowałam NSURLConnection. – Airuop
Czy masz wszystko poprawnie skonfigurowane po stronie serwera? Podobnie jak w przypadku parsowania rozszerzenia, układów odpowiedzi i widoków dla nich? Wygląda raczej na problem z serwerem niż na klienta. – 8vius