Я включил сжатие gzip для всех ответов в моей веб-службе (Play 2.4), следуя those instructions. Легко настроить, и я вижу, что это работает как шарм, проверивший с помощью curl и wirehark, что ответы отправляются сжатыми.Play WS - проверьте заголовки сжатия
Теперь я хочу быть хорошим разработчиком и добавить интеграционный тест, чтобы никто не нарушил HTTP-сжатие на следующей неделе. Вот где начинается самое интересное! Мой тест выглядит следующим образом:
"use HTTP compression" in {
forAll(endPoints) { endPoint =>
val response = await(
WS.url(Localhost + port + "/api" + endPoint).withHeaders("Accept-Encoding" -> "gzip").get()
)
response.header("Content-Encoding") mustBe Some("gzip")
}
}
Однако, тест не пройден, как заголовки ответа WS не включают в себя содержание enconding информации, а тело возвращается в виде обычного текста, несжатый.
[info] - should use HTTP compression *** FAILED ***
[info] forAll failed, because:
[info] at index 0, None was not equal to Some("gzip") (ApplicationSpec.scala:566)
Проверка трафика в Wireshark при выполнении этого теста я могу ясно видеть, что сервер возвращает GZIP закодированного ответ, поэтому он выглядит как-то WS прозрачна распаковкой ответа и обнажая заголовки Content-Encoding? Есть ли способ получить простой, сжатый ответ с полными заголовками, чтобы я мог проверить, сжат ли ответ или нет?
У вас есть решение для этого? – Salem
См. Мой ответ [ниже] (http://stackoverflow.com/a/39701208/887422) (он оказался слишком большим для ответа только на комментарий). Я закончил тем, что использовал простые старые классы Java и вообще обошел Play-WS для этого единственного теста, потому что мне нужно было что-то более низкоуровневое. – jjst