Alamofire: Al recibir un código de estado 204, alamofire agota el tiempo de espera

Creado en 7 jun. 2016  ·  3Comentarios  ·  Fuente: Alamofire/Alamofire

Para una solicitud que espero que se devuelva un 204 (Sin contenido) como un código de estado, Alamofire en cambio infiere esto como un error. Devuelve un error que tiene el mismo código de estado que una solicitud que se agota.

Se utilizó el siguiente código (uso muy básico de Alamofire)

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

Comentario más útil

hey @ borek2 ¿puedes asegurarte de que tu api no envíe un rallador de encabezado de longitud de contenido y luego cero? Tuve el mismo problema después de excavar 3 días en él. Encontré la solución.

Problema
el problema real es que mi api envía un encabezado de longitud de contenido con valor rallador y luego 0 como respuesta, por lo que Alamofire verifica la longitud del contenido y descubre que hay un rallador de longitud de contenido y luego cero, así que necesito leer los datos de respuesta para que Alamofire vaya a leer y el servidor no devuelve nada y se ha agotado el tiempo de espera. El servidor no devuelve nada y Alamofire está tratando de leer la respuesta.

Solución
asegúrese de que la api no devuelva el valor del encabezado de longitud del contenido, luego 0 cuando el código de estado es 204

@cnoon también necesitamos cambiar la lógica de cómo Alamofire maneja el código de solicitud 204 porque vamos a leer datos, pero el caso como el anterior no tiene ningún dato de respuesta en 204, por lo que no tenemos que leer datos si el código de respuesta es 204 sin contenido

Salud. 🍻

Todos 3 comentarios

Hola @ borek2 ,

Acabo de crear una prueba para verificar que todo funciona como se esperaba.

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")
}

Si esto no demuestra su caso de uso, proporcione un ejemplo diferente que reproduzca el comportamiento que está viendo. Tenemos un manejo personalizado de 204 en el serializador JSON que debería garantizar que reciba un caso .Success cuando utilice el serializador responseJSON .

Voy a cerrar este problema por ahora. Si proporciona más información que nos lleve a creer que puede haber un problema en Alamofire, con gusto lo volveremos a abrir e investigaremos más.

Salud. 🍻

hey @ borek2 ¿puedes asegurarte de que tu api no envíe un rallador de encabezado de longitud de contenido y luego cero? Tuve el mismo problema después de excavar 3 días en él. Encontré la solución.

Problema
el problema real es que mi api envía un encabezado de longitud de contenido con valor rallador y luego 0 como respuesta, por lo que Alamofire verifica la longitud del contenido y descubre que hay un rallador de longitud de contenido y luego cero, así que necesito leer los datos de respuesta para que Alamofire vaya a leer y el servidor no devuelve nada y se ha agotado el tiempo de espera. El servidor no devuelve nada y Alamofire está tratando de leer la respuesta.

Solución
asegúrese de que la api no devuelva el valor del encabezado de longitud del contenido, luego 0 cuando el código de estado es 204

@cnoon también necesitamos cambiar la lógica de cómo Alamofire maneja el código de solicitud 204 porque vamos a leer datos, pero el caso como el anterior no tiene ningún dato de respuesta en 204, por lo que no tenemos que leer datos si el código de respuesta es 204 sin contenido

Salud. 🍻

¡Gracias por la sugerencia @indrajitsinh ! Después de una actualización de alamofire, ya no tuve el problema, pero recordaré tu sugerencia cuando vuelva a tener problemas. ¡Gracias por responder!

¿Fue útil esta página
0 / 5 - 0 calificaciones