AFNetworking version 2 content-type error

afjsonrequestoperation, afnetworking, afnetworking-2, ios, objective-c

Solution

If using AFNetworking 2.0, you can use the `POST` method, which simplifies this a bit:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
NSDictionary *parameters = @{@"username":username, @"password":password};
[manager POST:@"https://mycompany.atlassian.net/rest/auth/latest/session/" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

This does the creation of the request, setting its `Content-Type` according to the `requestSerializer` setting, and encodes the JSON for you. One of the advantages of AFNetworking is that you can get out of the weeds of constructing and configuring `NSURLRequest` objects manually.

By the way, the "Request failed: unacceptable content-type: text/html" error means that regardless of what you were expecting to receive (e.g. JSON), you received HTML response. This is very common: Many server errors (e.g. the server informing you that the request was malformed, etc.) generate HTML error messages. If you want to see that HTML, in your `failure` block, simply log the `operation.responseString`.

Problem

I'm attempting to make an iphone app that will interact with a particular JIRA server. I've got the following code to log in: ``` 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]; ``` But it's giving me the following error having to do with 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", ``` I'm not sure what the problem is. I found this question, which I thought might be a similar problem, but the answers say to either use the `AFJSONRequestOperation` class (which I can't because I'm using AFNetworking version 2, which doesn't have that class), or to fix it on the server side (which I also can't for obvious reasons). What can I fix this error when I can't fix the server side and I can't use `AFJSONRequestOperation`?

Original source

Related problems