Почтовый запрос iOS AFNetworking возвращает Запрос не выполнен: неверный запрос (400)

Я использую AFNetworking для вызова почтового веб-сервиса, но каждый раз, когда я получаю ответ

Домен ошибки = com.alamofire.error.serialization.response Code = -1011 «Запрос не выполнен: неверный запрос (400)»

Вот мой код

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:configuration];

manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [self.responseSerializer.acceptableContentTypes setByAddingObject:@"application/json"];

[manager.requestSerializer setValue:@"application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];

NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init];

[parameters setObject:self.APIClientID forKey:@"client_id"];
[parameters setObject:self.APIClientSecret forKey:@"client_secret"];
[parameters setObject:self.APIGrantType forKey:@"grant_type"];

[manager POST:self.requestURL
parameters:parameters
  progress:nil
   success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
       success(task, responseObject);
   } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
       failure(task, error);
   }];

В почтальоне работает. Вот запрос к почтальону Кроме того, я нашел много ответов на подобную ошибку, но это ничего не решило.


person Hesham    schedule 04.09.2016    source источник
comment
Вы сначала проверили свой API в почтальоне? Вы добавили настройки безопасности транспорта приложений в свой plist?   -  person Amrit Trivedi    schedule 04.09.2016
comment
Я сделал, и это работает в почтальоне.   -  person Hesham    schedule 04.09.2016
comment
Скорее всего, ваш запрос на самом деле не совсем такой, как тот, который вы отправляете через Postman. Установите URL-адрес на какой-либо URL-адрес HTTP и проверьте содержимое вашего запроса с помощью Wireshark или подобного, и сравните с тем же, что было отправлено с помощью Postman.   -  person jcaron    schedule 04.09.2016
comment
Э-э, вы отправляете данные JSON с Content-Type, установленным на application/x-www-form-urlencoded... Это определенно признак того, что с вашим запросом что-то не так.   -  person jcaron    schedule 04.09.2016
comment
Я проверил запрос на почтальона и запрос на мое приложение, и они одинаковы. Кроме того, Content-Type такой же, как я отправляю его через почтальона.   -  person Hesham    schedule 04.09.2016
comment
@jcaron Я загрузил скриншот для запроса на почтальона   -  person Hesham    schedule 04.09.2016
comment
Нет, они не одинаковы. Вы отправляете JSON. Вам нужно изменить requestSerializer, который вы используете.   -  person jcaron    schedule 04.09.2016
comment
Давайте продолжим обсуждение в чате.   -  person Hesham    schedule 04.09.2016


Ответы (1)


Вы используете AFJSONRequestSerializer для сериализации вашего запроса. Это создаст полезную нагрузку JSON, а не запрос формы с кодировкой URL.

Попробуйте вместо этого использовать AFHTTPRequestSerializer.

Дополнительную информацию см. в документации здесь.

Вы также можете удалить следующую строку кода, правильный сериализатор запросов справится с этим за вас:

[manager.requestSerializer setValue:@"application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
person liamnichols    schedule 04.09.2016