【问题标题】:Unable to set multiple headers - Content-Type & Accept while using karate使用空手道时无法设置多个标题 - 内容类型和接受
【发布时间】:2025-12-19 20:15:11
【问题描述】:

我要测试的请求有 2 个强制标头 - Content-Type: 'application/json' 和 Accept: 'application/json'。

当我在以下场景下运行时,它给了我状态码 400,说缺少强制标头 Accept - 这是正确的行为。

Scenario: Validating test

  * configure headers = { Content-Type: 'application/json'}
And url testURL
  And request { "abc": {"xyz": "fgfdgf"}}
  When method post

但是,当我在下面的场景下运行时,它仍然给我状态码 400,说缺少强制标头 Content-Type - 这不是正确的行为。

场景:验证测试

  * configure headers = { Content-Type: 'application/json',Accept:'application/json'}
And url testURL
  And request { "abc": {"xyz": "fgfdgf"}}
  When method post
  Then status 200

有人可以提出第二种情况的问题吗?

【问题讨论】:

    标签: karate


    【解决方案1】:

    请注意,Content-Type 将由空手道自动设置,您无需设置 - 如果请求正文明确是 JSON。

    您所犯的错误是 - 字符作为 JSON (JS) 键名无效,因此可以这样做:

    * configure headers = { 'Content-Type': 'application/json', Accept: 'application/json' }
    

    注意Content-Type 周围的引号。

    【讨论】:

    • 我用引号试过了,但它仍然不适合我。如果我只设置 Content-Type 那么它可以工作,但如果我同时提供 Content-Type 和 Accept ,那么它就不起作用。
    • @Richa - 也许这是你服务器上的一个错误 :) 但我放弃了 - 现在是时候向你指出这些说明,祝你一切顺利:github.com/intuit/karate/wiki/How-to-Submit-an-Issue
    【解决方案2】:

    通过将 charset 配置为 null 解决了这个问题:

    • 配置 charset = null

    默认情况下,charset 被视为 UTF-8。因此,为了明确定义内容类型,我们需要在后台将 charset 设置为 null。

    【讨论】:

    • 这没有任何意义,你真的应该检查你是否有错误