Результат метода POST: код состояния 400 iOSIOS

Программируем под IOS
Ответить
Anonymous
 Результат метода POST: код состояния 400 iOS

Сообщение Anonymous »

Я пробовал много раз, но не могу выполнить простой POST-запрос к удаленному API. Мне нужно отправить имя пользователя и пароль, чтобы получить авторизацию для входа. Вот код:

Код: Выделить всё

NSURL * url = [NSURL URLWithString:@"http://thapi.xyz/auth/login"];
NSString *postData = @"username=emailExample@gmail.com&password=123456";
NSData * dataBody = [postData dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
NSString *postLenght = [NSString stringWithFormat:@"%d",[dataBody length]];

NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-unlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:postLenght forHTTPHeaderField:@"Content-Lenght"];
[request setHTTPBody:dataBody];

[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
NSLog(@" ERROR %@, RESPONSE %@ AND DATA %@",connectionError,response,[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]);
}];
Я сделал еще одну версию, в которой используется NSDictionary и анализ JSON (API использует JSON):

Код: Выделить всё

NSDictionary * login = @{@"username":@"exampleMail@gmail",@"password":@"123456"};
NSData * jsonData = [NSJSONSerialization dataWithJSONObject:login options:NSJSONWritingPrettyPrinted error:nil];
NSString *postLenght = [NSString stringWithFormat:@"%d",[jsonData length]];

NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-unlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:postLenght forHTTPHeaderField:@"Content-Lenght"];
[request setHTTPBody:jsonData];

[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
NSLog(@" ERROR %@, RESPONSE %@ AND DATA %@",connectionError,response,[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]);
}];
А вот результат обоих кодов:

Код: Выделить всё

    2016-06-18 05:24:20.329 Hoffmann iOS[10317:1088208]
ERROR (null), RESPONSE 
{ URL: http://thapi.xyz/auth/login } { status code: 400, headers {
"Access-Control-Allow-Origin" = "*";
Connection = "keep-alive";
"Content-Length" = 70;
"Content-Type" = "application/json; charset=utf-8";
Date = "Sat, 18 Jun 2016 04:24:18 GMT";
Etag = "W/\"46-22Kcj8zTKrWgQ7OCr429+w\"";
Server = "nginx/1.6.2";
Vary = "Accept-Encoding";
"X-Powered-By" = undefined;
"X-Response-Time" = "5.357ms";
} } AND DATA {"name":"ParameterError","message":"Request should contain: username"}
Я очень ценю все ответы.

Подробнее здесь: https://stackoverflow.com/questions/378 ... de-400-ios
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»