Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AFNetworking 2.0: NSLocalizedDescription=Request failed: unacceptable content-type: text/html

I tried to GET html from Apple homepage.

AFHTTPRequestOperationManager *manager
= [AFHTTPRequestOperationManager manager];
[manager GET:@"http://www.apple.com/jp" parameters:nil
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"HTML: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

This failed with error message as below:

2014-02-07 14:54:22.922 Tests[1833:70b] Error: Error Domain=AFNetworkingErrorDomain Code=-1016 "Request failed: unacceptable content-type: text/html" UserInfo=0x8a32650 {NSErrorFailingURLKey=http://www.apple.com/jp/, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0xea2e1a0> { URL: http://www.apple.com/jp/ } { status code: 200, headers {
    "Accept-Ranges" = bytes;
    "Cache-Control" = "max-age=237";
    Connection = "keep-alive";
    "Content-Encoding" = gzip;
    "Content-Length" = 4402;
    "Content-Type" = "text/html; charset=UTF-8";
    Date = "Fri, 07 Feb 2014 05:52:51 GMT";
    Expires = "Fri, 07 Feb 2014 05:56:48 GMT";
    Server = Apache;
    Vary = "Accept-Encoding";
    Via = "1.0 proxy1.screen.co.jp (squid)";
    "X-Cache" = "MISS from proxy1.screen.co.jp";
    "X-Cache-Lookup" = "HIT from proxy1.screen.co.jp:8080";
} }, NSLocalizedDescription=Request failed: unacceptable content-type: text/html}

I found the message Request failed: unacceptable content-type: text/html so I understand I have to let text/html acceptable. Then, I added the line: manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];.

AFHTTPRequestOperationManager *manager 
= [AFHTTPRequestOperationManager manager];
manager.responseSerializer.acceptableContentTypes
= [NSSet setWithObject:@"text/html"]; // ###### ADDED LINE ######
[manager GET:@"http://www.apple.com/jp" parameters:nil
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"HTML: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

But this failed, too.

2014-02-07 14:55:48.927 Tests[1873:70b]
Error: Error Domain=NSCocoaErrorDomain Code=3840
"The operation couldn’t be completed. (Cocoa error 3840.)"
(JSON text did not start with
array or object and option to allow fragments not set.)
UserInfo=0xfa7b870 {NSDebugDescription=
JSON text did not start with
array or object and option to allow fragments not set.}

Thank you for your help.

like image 944
Feel Physics Avatar asked Dec 04 '22 07:12

Feel Physics


1 Answers

The problem is that AFHTTPRequestOperationManager defaults to a responseSerializer of AFJSONResponseSerializer. By changing acceptableContentTypes, you are changing which content types will be accepted, but you're not changing the fact that AFJSONResponseSerializer will still look for JSON in the response.

You might want to just set the responseSerializer to AFHTTPResponseSerializer, so that it will no longer try to parse the JSON (and will automatically accept text/html):

manager.responseSerializer = [AFHTTPResponseSerializer serializer];
like image 130
Rob Avatar answered Jan 16 '23 05:01

Rob