【问题标题】:Having trouble getting content-encoding to show up in response header for get request无法让内容编码显示在获取请求的响应标头中
【发布时间】:2020-08-24 06:29:34
【问题描述】:

我正在尝试编写一个空手道测试,以验证特定响应标头是否包含值为 gzip 的 Content-Encoding 标头字段。我尝试了我的 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

【问题讨论】:

    标签: karate


    【解决方案1】:

    这似乎是 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
    

    因此,如果 Jersey 可以满足您的其余测试,也许这就是您所需要的。让它为karate-apache 工作对我来说不是一个优先事项,所以如果你或其他任何人愿意调查或修复它,那就太好了。

    【讨论】:

    • 首先感谢您的快速回复!稍微研究一下,它看起来就像 Apache HttpClient 直接工作的方式只是解压缩响应并删除各种标头,包括 Content-Encoding stackoverflow.com/a/61011806/13499915。我认为这件球衣适合我的用例,感谢您解除对我的阻碍
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    相关资源
    最近更新 更多