Я пытаюсь создать приложение для iphone, которое будет взаимодействовать с определенным сервером JIRA. У меня есть следующий код для входа:
NSURL *url = [[NSURL alloc] initWithString:@"https://mycompany.atlassian.net/rest/auth/latest/session/"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
NSString *postString = [NSString stringWithFormat:@"{\"username\":\"%@\",\"password\":\"%@\"}", username, password];
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept" ];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:
^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"ERROR: %@", error);
}
];
[operation start];
Но это дает мне следующую ошибку, связанную с Content-Type:
ERROR: Error Domain=AFNetworkingErrorDomain Code=-1011
"Request failed: unsupported media type (415)"
UserInfo=0x8cd6540
{
NSErrorFailingURLKey=https://mycompany.atlassian.net/rest/auth/latest/session/,
NSLocalizedDescription=Request failed: unsupported media type (415),
NSUnderlyingError=0x8c72e70
"Request failed: unacceptable content-type: text/html",
Я не уверен, в чем проблема. Я нашел этот вопрос, который, по моему мнению, может быть аналогичная проблема, но в ответах говорится либо использовать класс AFJSONRequestOperation
(что я не могу, потому что я использую AFNetworking версии 2, в которой нет этого класса), либо исправить его на стороне сервера (что я также могу не по понятным причинам).
Что я могу исправить эту ошибку, если я не могу исправить серверную часть и не могу использовать AFJSONRequestOperation
?
stringWithFormat
(если пароль содержит определенные символы, он не будет работать). Лучше использоватьNSDictionary *postDictionary = @{@"username":username,@"password":password};
, а затем использоватьNSData *postBody = [NSJSONSerialization dataWithJSONObject:postDictionary options:0 error:&error];
для созданияNSData
дляsetHTTPBody
. Или в AF 2.0 используйтеPOST
иAFJSONRequestSerializer
(в AF 1.x используйтеAFHTTPClient
сparameterEncoding
изAFJSONParameterEncoding
), и он преобразует словарь в JSON для вас. - person Rob   schedule 24.01.2014