Alamofire: При получении кода состояния 204 тайм-аут alamofire истекает

Созданный на 7 июн. 2016  ·  3Комментарии  ·  Источник: Alamofire/Alamofire

Для запроса, который, как я ожидаю, будет возвращен 204 (Нет содержимого) в качестве кода состояния, Alamofire вместо этого считает это ошибкой. Он возвращает ошибку, которая имеет тот же код состояния, что и запрос, время ожидания которого истекло.

Был использован следующий код (очень простое использование Alamofire)

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

Самый полезный комментарий

эй @ borek2, можете ли вы убедиться, что ваш api не отправляет терку заголовка длины содержимого, а затем ноль, у меня была такая же проблема после того, как я копал в ней 3 дня, я нашел решение

Проблема
Фактическая проблема заключается в том, что мой api отправляет заголовок длины содержимого с теркой значения, затем 0 в качестве ответа, поэтому Alamofire проверяет длину содержимого, и он обнаруживает, что, о, есть терка длины содержимого, а затем ноль, поэтому мне нужно прочитать данные ответа, чтобы Alamofire собирался читать это, и сервер ничего не возвращает, и произошел тайм-аут. Сервер ничего не возвращает, и Alamofire пытается прочитать ответ

Решение
убедитесь, что api не возвращает значение заголовка длины содержимого, а затем 0, когда код состояния равен 204

@cnoon, нам также нужно изменить логику того, как Alamofire обрабатывает код запроса 204, потому что мы собираемся читать данные, но в случае, подобном приведенному выше, нет данных ответа в 204, поэтому нам не нужно читать данные, если код ответа 204 нет содержимого

Ваше здоровье. 🍻

Все 3 Комментарий

Привет @ borek2 ,

Я только что создал тест, проверяющий, что все работает должным образом.

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

Если это не демонстрирует ваш вариант использования, представьте другой пример, который воспроизводит наблюдаемое вами поведение. У нас есть настраиваемая обработка 204 в сериализаторе JSON, которая должна гарантировать, что вы получите регистр .Success при использовании сериализатора responseJSON .

Я сейчас закрываю этот вопрос. Если вы предоставите дополнительную информацию, которая заставит нас поверить в то, что в Alamofire может быть проблема, мы с радостью откроем ее повторно и займемся дальнейшим расследованием.

Ваше здоровье. 🍻

эй @ borek2, можете ли вы убедиться, что ваш api не отправляет терку заголовка длины содержимого, а затем ноль, у меня была такая же проблема после того, как я копал в ней 3 дня, я нашел решение

Проблема
Фактическая проблема заключается в том, что мой api отправляет заголовок длины содержимого с теркой значения, затем 0 в качестве ответа, поэтому Alamofire проверяет длину содержимого, и он обнаруживает, что, о, есть терка длины содержимого, а затем ноль, поэтому мне нужно прочитать данные ответа, чтобы Alamofire собирался читать это, и сервер ничего не возвращает, и произошел тайм-аут. Сервер ничего не возвращает, и Alamofire пытается прочитать ответ

Решение
убедитесь, что api не возвращает значение заголовка длины содержимого, а затем 0, когда код состояния равен 204

@cnoon, нам также нужно изменить логику того, как Alamofire обрабатывает код запроса 204, потому что мы собираемся читать данные, но в случае, подобном приведенному выше, нет данных ответа в 204, поэтому нам не нужно читать данные, если код ответа 204 нет содержимого

Ваше здоровье. 🍻

Спасибо за предложение @indrajitsinh ! После обновления alamofire у меня больше не было проблемы, но я запомню ваше предложение, когда у меня снова возникнут проблемы. Спасибо за ответ!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

dpstart picture dpstart  ·  3Комментарии

ghost picture ghost  ·  3Комментарии

filippovdev picture filippovdev  ·  3Комментарии

noear picture noear  ·  3Комментарии

solomon23 picture solomon23  ·  3Комментарии