AFNetworkingにおいてacceptableContentTypesを指定してもRequest failedになる

By | 2014年6月25日

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/rss+xml"];

[manager GET:@"*****************"
  parameters:nil
     success:^(NSURLSessionDataTask *task, id responseObject) {
         NSLog(@"responseObject = [%@]", responseObject);
   } failure:^(NSURLSessionDataTask *task, NSError *error) {
         NSLog(@"Error = [%@]", error);
   }];

このようなコードを実行した結果、

Error = [Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/xml" UserInfo=0x14e40ff0 {NSErrorFailingURLKey=*****************, com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x14e801f0> { URL: ***************** } { status code: 200, headers {
Connection = close;
"Content-Type" = "text/xml; charset=utf-8";
Date = "Wed, 25 Jun 2014 07:06:33 GMT";
Server = Apache;
"Transfer-Encoding" = Identity;
} }, NSLocalizedDescription=Request failed: unacceptable content-type: text/xml}]

このようなエラーが返ってきました(*****************はURLですが、ここでは伏字にしてあります)。このエラーは、acceptableContentTypesで指定したコンテンツタイプとレスポンス側のコンテンツタイプが一致していないのが原因です。エラーメッセージをよく見ましょう。

"Content-Type" = "text/xml; charset=utf-8";

コンテンツタイプは”text/xmlのようです。

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/xml"];

このように修正すればOKです。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です