AFNetworking報錯:(415 Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: unsupported media type (415)")

來源:互聯網
上載者:User

標籤:

問題?

今天在與後台調介面的時候,遇到一個問題,使用AFNetworking報錯,具體如下:

Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: unsupported media type (415)" UserInfo={com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x7f84d1409fa0> { URL: http://api.mutualtalk.net/api/common/123456 } { status code: 415, headers {    "Content-Language" = en;    "Content-Length" = 1048;    "Content-Type" = "text/html;charset=utf-8";    Date = "Tue, 05 Jul 2016 00:24:35 GMT";    Server = "nginx/1.10.1";} },--------一些位元據,此處省略n行字,NSLocalizedDescription=Request failed: unsupported media type (415)

為什麼會出現這個報錯呢?

關於網路請求的介面,通常的做法是,利用第三方AFNetworking,這個強大的網路請求庫,再此基礎上,將項目中每個模組所用到的介面,進行一次簡單的封裝,這樣,每個模組中的介面都是一類,便於調用,管理,維護...

先說一下我的做法,由於之前後台是php寫的,但是我們的後台是java寫的,都是搞server的,但是我不知道兩個語言對資料格式的處理,有什麼特殊的處理,反正套用之前的處理,報錯,跟後台聯調,後台根本接收不到請求,然後直接就報錯,見這陣勢,立馬度娘神馬,Google神馬?stockoverflow什麼的,各種答案,試了半天,然並卵,

以下為嘗試的解決方案:

1>修改AFNetworking內部,這個檔案AFURLResponseSerialization.m中修改代碼就能解決:

第223行,初始化時,將如下代碼:

 

1 self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil nil];  

 

修改為:

1 self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil nil];  

 

結果,運行,然並卵,我不否認,可能可以解決某些人遇到的問題,說是AFNetworking不支援以"text/html"格式的"content-type",反正我是添加了,沒啥用;

2>在建立要求管理者(manger)是,做一些設定,其實本質上同第一種的解決方案是一樣的,給AFNetworking添加一種支援的"text/html"格式,沒什麼用,還是報錯,要不報400錯;

   //1.建立一個要求管理者    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];      //初始化響應者    manager.requestSerializer = [AFHTTPRequestSerializer serializer];    manager.responseSerializer = [AFHTTPResponseSerializer serializer];     //添加一種支援的類型   manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"application/json", @"text/json", nil];        //2.發送請求    NSDictionary *dict = @{                           @"mobile":@"1111111",                           @"type":@5,                           @"Code":@"86",                           @"key":@"eeqwerqwerqwerqwerqwe3af"                   };    NSString *url = @"http://api/asdfasd.com/334234";     url = [url stringByRemovingPercentEncoding];        [manager POST:url parameters:dict progress:^(NSProgress * _Nonnull uploadProgress) {            } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {        NSLog(@"請求成功%@",responseObject);            } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {        if (error) {            NSLog(@"%@",error);        }    }];

 

3>為瞭解決這個問題,單開一個項目,專門解決這個報錯,由於java後台支援json資料格式傳輸,支援"application/json"格式的"content-type",後來在對請求資料格式和響應資料格式初始化的時候,將之前的父類換成了它的子類(AFJSONRequestSerializer);x-code7.3不提示(AFJSONRequestSerializer這個類),只有copy了,如下:

 1  //初始化響應者 2 //    manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 3 //    manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 4       manager.requestSerializer = [AFJSONRequestSerializer serializer]; 5       manager.responseSerializer = [AFJSONResponseSerializer serializer]; 6  7 /***************    請忽略我---  *****************/ 8 /** 9  `AFJSONRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSJSONSerialization`, setting the `Content-Type` of the encoded request to `application/json`.10  */11 @interface AFJSONRequestSerializer : AFHTTPRequestSerializer12 備忘:13 AFJSONRequestSerializer 繼承自AFHTTPRequestSerializer,不過參數的編碼形式,進行了設定,也就是設定 `Content-Type` 為 `application/json`,具體調到標頭檔,就是如下:14 + (instancetype)serializer {15     return [self serializerWithWritingOptions:(NSJSONWritingOptions)0];16 }17 18 + (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions19 {20     AFJSONRequestSerializer *serializer = [[self alloc] init];21     serializer.writingOptions = writingOptions;22 23     return serializer;24 }

至此,問題終於解決,到此,也只能怪自己學藝不精,吃一塹,長一智,慢慢積累吧,寫給自己吧

 

 

 

 

AFNetworking報錯:(415 Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: unsupported media type (415)")

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.