Возникли проблемы с отображением кодировки содержимого в заголовке ответа для запроса на получение - PullRequest
2 голосов
/ 08 мая 2020

Я пытался написать тест карате, который подтвердил, что конкретный заголовок ответа содержит поле заголовка Content-Encoding со значением gzip. Я пробовал на своем api, где оба раза поле кодирования содержимого отсутствовало в ответе карате. Обе эти конечные точки вернули поле кодирования содержимого в командах postman и curl.

Затем я попытался подключиться к службе postman-echo, чтобы узнать, была ли моя конечная точка api, с которой у карате возникли проблемы, и кажется, что это не только мой api. Может ли кто-нибудь взглянуть на мой код и узнать, делаю ли я что-то неправильно, чтобы поле заголовка отображалось в ответе?

Feature: test getting Content-Encoding

  Background:
    * url 'https://postman-echo.com/gzip'

  Scenario:
    Given header Accept-Encoding = 'gzip'
    When method get
    Then status 200
    And match responseHeaders contains {'Content-Encoding':'#present'}

Вот как выглядит запрос карате

1 > GET https://postman-echo.com/gzip
1 > Accept-Encoding: gzip
1 > Connection: Keep-Alive
1 > Host: postman-echo.com
1 > User-Agent: Apache-HttpClient/4.5.12 (Java/1.8.0_252)

, а ответ выглядит как

1 < 200
1 < Connection: keep-alive
1 < Content-Type: application/json; charset=utf-8
1 < Date: Fri, 08 May 2020 16:18:42 GMT
1 < ETag: W/"ef-7kclc8pzXTvQiPUaEOf6j95iFaE"
1 < Vary: Accept-Encoding
1 < set-cookie: sails.sid=s%3A6G_FShPRZH4V1G-tVDfUEEfMwQQmolo5.T2Cb37zqYA21FTyRyIGutVWQWo9ta4EWiod36%2FkM88I; Path=/; HttpOnly
{
  "gzipped": true,
  "headers": {
    "x-forwarded-proto": "https",
    "x-forwarded-port": "443",
    "host": "postman-echo.com",
    "x-amzn-trace-id": "Root=1-5eb58662-c4aaeec26efd116ac0544a18",
    "accept-encoding": "gzip",
    "user-agent": "Apache-HttpClient/4.5.12 (Java/1.8.0_252)"
  },
  "method": "GET"
}

Заголовок ответа curl:

curl --location --request GET 'https://postman-echo.com/gzip' \
> --header 'Accept-Encoding: gzip' -I

HTTP/2 200 
date: Fri, 08 May 2020 16:21:53 GMT
content-type: application/json; charset=utf-8
content-length: 220
content-encoding: gzip
etag: W/"dc-BuD8DN1qXT7trYUQtZOuSvbq1pM"
vary: Accept-Encoding
set-cookie: sails.sid=s%3Aj86lznX3nK20fnEN4B3nbHESrfWqVJ3M.236VrsmQp7V%2F7%2BrvG%2FEtlc9yUVLTtylh1yyIAdQJSiY; Path=/; HttpOnly

1 Ответ

0 голосов
/ 08 мая 2020

Кажется, именно так работает Apache HttpClient или как он настроен для Каратэ. Я только что обнаружил, что вы возвращаете заголовок с помощью karate-jersey:

1 > GET https://postman-echo.com/gzip
1 > Accept: */*
1 > Accept-Encoding: gzip
1 > User-Agent: Jersey/2.30 (HttpUrlConnection 1.8.0_231)

22:40:48.981 [ForkJoinPool-1-worker-1] DEBUG com.intuit.karate - response time in milliseconds: 1177.37
1 < 200
1 < Connection: keep-alive
1 < Content-Encoding: gzip
1 < Content-Length: 248
1 < Content-Type: application/json; charset=utf-8
1 < Date: Fri, 08 May 2020 17:10:48 GMT
1 < ETag: W/"f8-sigbV4PuNI2Fx08AqzMEqW1WIYY"
1 < Vary: Accept-Encoding

Так что, если Джерси подходит для остальных ваших тестов, возможно, это все, что вам нужно. Заставить это работать для karate-apache не является для меня приоритетом, поэтому, если вы или кто-либо другой захотите исследовать или исправить это, это было бы здорово.

...