【问题标题】:How to resolve error 415 Unsupported Media Type when Content-Type is correctly set正确设置 Content-Type 时如何解决错误 415 Unsupported Media Type
【发布时间】:2020-05-06 06:50:33
【问题描述】:

我有一个简单的 POST 请求,它需要一个 json Content-Type 标头和一个类似的正文

{
   oneNbr: "2016004444",
   twoCode: "@@@",
   threeNbr: "STD PACK",
   sheetTitle: "010000",
   codeType: "AF14"
}

当我在 Postman 中运行它时,它按预期运行,返回 200 状态和预期响应。

这是空手道中的相同脚本:

  Scenario: Sample test
    * def payload =
      """
    {
       oneNbr: "2016004444",
       twoCode: "@@@",
       threeNbr: "STD PACK",
       sheetTitle: "010000",
       codeType: "AF14"
    }
      """
    Given path '/my_end_point/endpoint'
    And request payload
    When method post
    Then status 200

当我运行它时,它返回 {"code":"415","status":"Unsupported Media Type"}。控制台输出显示在 POST 期间设置了正确的内容类型。

即使我在脚本中专门设置了内容类型,仍然会返回 415,例如

And header Content-Type = 'application/json'

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

感谢任何帮助。

【问题讨论】:

  • 您能说出您的服务器正在接收什么内容类型吗?我建议在 Postman 控制台中查看 Postman 正在发出的完整请求/标头,并将其与 Karate 控制台中记录的请求进行比较。根据您的描述,您的服务器可能因其他原因而崩溃。
  • @Alex J 感谢您的建议。做到了这一点,并没有带来任何新的东西。还尝试了另一个休息工具 Advanced Rest Client 进行比较。 API 调用在那里运行良好。

标签: karate


【解决方案1】:

我们进行了一些调试,发现空手道会自动将“charset=UTF-8”附加到 Content-Type 标头。 API 不需要字符集。

找到以下帖子并解决了问题:

How can I send just 'application/json' as the content-type header with Karate?

发布此内容以帮助将来的其他人。

【讨论】:

  • 顺便说一句,您的 API 很可能不符合标准。
【解决方案2】:

这很简单。尝试在您的后台使用它。

* def charset = null

【讨论】:

    【解决方案3】:

    尝试添加* header Accept = 'application/json' 标头。空手道和邮递员之间的一个区别是邮递员试图变得聪明并自动添加一个Accept 标题 - 而空手道没有。

    【讨论】:

    • 我也试过了。刚刚又试了一次。它不能解决问题。有没有办法进一步调试此类问题?
    猜你喜欢
    • 2016-06-10
    • 1970-01-01
    • 2020-02-18
    • 2020-05-05
    • 2012-04-19
    • 2020-07-10
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多