Estou testando a nova versão 2.0 do AFNetworking e estou recebendo o erro acima. Alguma idéia de por que isso está acontecendo? Aqui está o meu código:
NSURL *URL = [NSURL URLWithString:kJSONlink];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
op.responseSerializer = [AFJSONResponseSerializer serializer];
[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
[[NSOperationQueue mainQueue] addOperation:op];
Estou usando o Xcode 5.0.
Além disso, aqui está a mensagem de erro:
Error: Error Domain=AFNetworkingErrorDomain Code=-1016 "Request failed: unacceptable content-type: text/html" UserInfo=0xda2e670 {NSErrorFailingURLKey=kJSONlink, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0xda35180> { URL: kJSONlink } { status code: 200, headers {
Connection = "Keep-Alive";
"Content-Encoding" = gzip;
"Content-Length" = 2898;
"Content-Type" = "text/html";
Date = "Tue, 01 Oct 2013 10:59:45 GMT";
"Keep-Alive" = "timeout=5, max=100";
Server = Apache;
Vary = "Accept-Encoding";
} }, NSLocalizedDescription=Request failed: unacceptable content-type: text/html}
Eu apenas escondi o JSON usando o kJSONlink. Isso deve retornar um JSON.
ios
afnetworking
afnetworking-2
jaytrixz
fonte
fonte
op.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
acceptableContentTypes
:)op.responseSerializer.acceptableContentTypes = [op.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
op.responseSerializer.acceptableContentTypes = NSSet(object: "text/html")
Definir meu
RequestOperationManager
serializador de resposta paraHTTPResponseSerializer
corrigir o problema.Objetivo-C
Rápido
Fazer essa alteração significa que não preciso adicionar
acceptableContentTypes
a cada solicitação que faço.fonte
AFJSONResponseSerializer
responseSerializer
comoAFJSONResponseSerializer
.Eu levei a resposta / comentário de @jaytrixz um passo adiante e adicionei "text / html" ao conjunto de tipos existente. Dessa forma, quando eles corrigem no lado do servidor "application / json" ou "text / json", afirmo que funcionará perfeitamente.
fonte
No lado do servidor, adicionei:
no meu código .php e isso também resolveu o problema.
fonte
if(!headers_sent() ) { header('Content-Type: application/json'); }
É uma solução agradávelEu resolvo esse problema de uma perspectiva diferente.
Eu acho que se o servidor envia dados JSON com
Content-Type: text/html
cabeçalho. Isso não significa que o servidor pretendeu enviar-lhe algum html, mas acidentalmente mudou para JSON. Isso significa que o servidor não se importa com oContent-Type
cabeçalho. Portanto, se o funcionário do servidor não se importa com o lado do cliente, é melhor ignorar oContent-Type
cabeçalho também. Para ignorar oContent-Type
cabeçalho, faça check-inAFNetworking
Dessa maneira, o
AFJSONResponseSerializer
(o padrão) serializará os dados JSON sem fazer check-Content-Type
in no cabeçalho da resposta.fonte
Uma maneira simples de permitir receber o tipo de conteúdo "texto / sem formatação":
Da mesma forma, se você deseja ativar o tipo de conteúdo "text / html":
fonte
Tentei abaixo da linha de acordo com a resposta @Andrie, mas não funcionou,
então, depois de caçar mais, trabalhei para que ele funcionasse com sucesso.
Aqui está o meu snip de código.
Espero que isso ajude alguém por aí.
fonte
Esta é a única coisa que eu achei para trabalhar
fonte
Se alguém estiver usando
AFHTTPSessionManager
, pode-se fazer assim para resolver o problema,Eu subclassei
AFHTTPSessionManager
onde estou fazendo assim,fonte
No meu caso, não tenho controle sobre a configuração do servidor, mas sei que ele espera "application / json" para "Content-Type". Eu fiz isso no lado do cliente iOS:
consulte o erro de tipo de conteúdo do AFNetworking versão 2
fonte
Basta adicionar esta linha:
fonte
Eu tive um problema semelhante ao trabalhar com o AFNetworking a partir de uma base de código Swift, então estou deixando isso aqui no caso remoto de que alguém é tão azarado quanto eu ter que trabalhar nessa configuração. Se você é, eu sinto seu amigo, fique forte!
A operação falhou devido a "tipo de conteúdo inaceitável", apesar de eu ter definido o
acceptableContentTypes
com umSet
contendo o valor tipo de conteúdo em questão.A solução para mim foi ajustar o código Swift para ser mais amigável ao Objective-C, eu acho :
fonte
Uma boa pergunta sempre tem várias respostas, para reduzir e ajudá-lo a escolher a resposta certa, aqui também estou adicionando a minha. Eu testei e funciona bem.
fonte
fonte