Метод API POST не сохраняет данные на сервере SQL

Привет, я новичок в разработке для iphone, сейчас я работаю с проектом, где у меня есть экран, в котором пользователь должен ввести свои данные, такие как имя пользователя и пароль. Я погуглил и узнал о NSURLConnection для получения / размещения / удаления. Я могу получить данные по кодам ниже,

  NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
 [request setURL:[NSURL URLWithString:@"http://************/api/Users"]];
 [request setHTTPMethod:@"GET"];
 [request setValue:@"application/json;charset=UTF-8" forHTTPHeaderField:@"Content-
 Type"];
 NSURLResponse *response;
 NSData *GETData = [NSURLConnection sendSynchronousRequest:request   
 returningResponse:&response error:nil];
 NSString *ResultData = [[NSString alloc] initWithBytes:[GETData bytes] length:[GETData 
  length] encoding: NSASCIIStringEncoding];
 NSLog(@"ResultData: %@", ResultData);

Но для метода POST я не понимаю, как он функционирует и как хранит записи в базе данных сервера SQL, не могу понять, хранит ли он данные или нет, я попробовал следующие коды:

username = @"Aravind.k";
password = @"1234/";
email = @"sivaarwin@gmail.com";

NSString *post = [NSString  stringWithFormat:@"FirstName=%@&LastName=%@&WorkEmailAddress=%@",
    username, password, email];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding 
     allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"http://*********/api/Users"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded;charset=UTF-8"  
forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSLog(@"request: %@", request);
NSLog(@"postData: %@", postData);
NSURLResponse *response;
NSData *POSTReply = [NSURLConnection sendSynchronousRequest:request 
                                          returningResponse:&response 
                                                      error:nil];    
NSLog(@"POSTReply: %@", POSTReply);    
NSString *theReply = [[NSString alloc] initWithBytes:[POSTReply bytes] 
                                              length:[POSTReply length] 
                                            encoding:NSASCIIStringEncoding];

NSLog(@"Reply: %@", theReply);

Один и тот же URL-адрес API для GET и POST, любые предложения, касающиеся POST и DELETE, будут благодарны, заранее спасибо. И как мы можем получать уведомления, когда введенные данные сохраняются на сервере.

1 ответ

Во-первых: не проверка на ошибки автоматически приводит к снижению голосов;)

Пожалуйста, отредактируйте ваш код с полной проверкой ошибок!

При использовании типа MIME application/x-www-form-urlencoded вам нужно правильно кодировать параметры.

Я хотел бы предложить, чтобы создать NSDictionary удерживая ваши параметры, например:

NSDictionary* params = @{@"FirstName": firstName, @"LastName": lastName, @"password": password};

и затем использовать подход, описанный в следующей ссылке, чтобы получить закодированную строку параметров, подходящую для использования в качестве основных данных для application/x-www-form-urlencoded сообщение:

Как отправить несколько параметров на сервер PHP в сообщении HTTP

Ссылка выше реализует категорию и метод dataFormURLEncoded для NSDictionary, который возвращает закодированную строку в NSData объект:

NSData* postData = [params dataFormURLEncoded];

Примечание: тип MIME application/x-www-form-urlencoded не имеет параметра charset. Он будет игнорироваться сервером. Вы должны установить заголовок, как показано ниже:

[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

В противном случае ваш код должен работать. Я настоятельно рекомендую использовать асинхронную версию удобного метода:

+ (void)sendAsynchronousRequest:(NSURLRequest *)request 
                          queue:(NSOperationQueue *)queue 
              completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler
Другие вопросы по тегам