Alamofire: Ao receber um código de status 204, alamofire atinge o tempo limite

Criado em 7 jun. 2016  ·  3Comentários  ·  Fonte: Alamofire/Alamofire

Para uma solicitação que eu espero que um 204 (Sem conteúdo) seja retornado como um código de status, Alamofire infere isso como um erro. Ele retorna um erro que tem o mesmo código de status de uma solicitação que atinge o tempo limite.

O seguinte código foi usado (uso muito básico de Alamofire)

alamofireManager.request(request)
        .validate(statusCode: 200..<400)
        .responseJSON(options: .AllowFragments) { (response: Response<AnyObject, NSError>) in
                handleAlamofireResponse(response)
         }
question response serializer

Comentários muito úteis

Ei @ borek2 você pode ter certeza de que sua API não envia ralador de cabeçalho de comprimento de conteúdo e zero? Tive o mesmo problema depois de cavar 3 dias nele encontrei a solução

Problema
o problema real é que minha API está enviando cabeçalho de comprimento de conteúdo com valor ralador e depois 0 como resposta, então Alamofire verifica o comprimento do conteúdo e ele descobre que ohh há ralador de comprimento de conteúdo então zero, então eu preciso ler os dados de resposta, então Alamofire vai ler e o servidor não retorna nada e ocorre o tempo limite. O servidor não retorna nada e o Alamofire está tentando ler a resposta

Solução
certifique-se de que api não retorne o valor do cabeçalho de comprimento de conteúdo maior do que 0 quando o código de status for 204

@ meia-noite , também precisamos mudar a lógica de como o Alamofire lida com o código de solicitação 204 porque vamos ler os dados, mas caso como o acima não tenha nenhum dado de resposta em 204, então não temos que ler os dados se o código de resposta for 204 sem conteúdo

Saúde. 🍻

Todos 3 comentários

Olá @ borek2 ,

Acabei de criar um teste verificando se tudo está funcionando conforme o esperado.

func testDeleteWith204ResponseStatusCode() {
    let expectation = expectationWithDescription("204 should succeed")

    Alamofire.request(.DELETE, "https://httpbin.org/status/204")
        .validate(statusCode: 200..<400)
        .responseJSON(options: .AllowFragments) { response in
            print(response.response)
            print(response)
            expectation.fulfill()
        }

    waitForExpectationsWithTimeout(timeout, handler: nil)

    print("Yay...204 works as expected with responseJSON serializer")
}

Se isso não demonstrar seu caso de uso, forneça um exemplo diferente que replique o comportamento que você está vendo. Temos manipulação 204 customizada no serializador JSON que deve garantir que você receba uma caixa .Success ao usar o serializador responseJSON .

Vou encerrar esse problema por enquanto. Se você fornecer mais informações que nos levem a acreditar que pode haver um problema no Alamofire, será um prazer reabrir e investigar mais detalhadamente.

Saúde. 🍻

Ei @ borek2 você pode ter certeza de que sua API não envia ralador de cabeçalho de comprimento de conteúdo e zero? Tive o mesmo problema depois de cavar 3 dias nele encontrei a solução

Problema
o problema real é que minha API está enviando cabeçalho de comprimento de conteúdo com valor ralador e depois 0 como resposta, então Alamofire verifica o comprimento do conteúdo e ele descobre que ohh há ralador de comprimento de conteúdo então zero, então eu preciso ler os dados de resposta, então Alamofire vai ler e o servidor não retorna nada e ocorre o tempo limite. O servidor não retorna nada e o Alamofire está tentando ler a resposta

Solução
certifique-se de que api não retorne o valor do cabeçalho de comprimento de conteúdo maior do que 0 quando o código de status for 204

@ meia-noite , também precisamos mudar a lógica de como o Alamofire lida com o código de solicitação 204 porque vamos ler os dados, mas caso como o acima não tenha nenhum dado de resposta em 204, então não temos que ler os dados se o código de resposta for 204 sem conteúdo

Saúde. 🍻

Obrigado pela sugestão @indrajitsinh ! Depois de uma atualização do alamofire, não tive mais o problema, mas me lembrarei da sua sugestão quando tiver problemas novamente. Obrigado por responder!

Esta página foi útil?
0 / 5 - 0 avaliações