多部分 POST 请求在空手道中不起作用,但相同的 API 调用在 POSTMAN 中工作正常

问题描述 投票:0回答:1

我正在尝试通过空手道中的多部分发布请求 api 上传文件,但是我收到了响应 400 - 一个错误,指出文件格式不正确,更具体地说是文件 mime 类型错误。但是,当我使用完全相同的文件在邮递员中使用相同的 api 时,它工作正常,没有任何错误。有谁知道导致此问题的原因是什么? api输入是form-data中的文件。

我检查了邮递员和空手道的两个呼叫的标头,没有发现问题 - 它们是相同的。但是我注意到空手道的多部分在请求中发送

charset=utf-8
,我认为这就是导致错误的原因,因为后端不期望
charset=utf-8

以下是空手道的多部分请求正文

Mixed: content-disposition: form-data; name="file"; filename="file.txt"
content-type: multipart/form-data; charset=UTF-8
content-length: 563
Completed: true
IsInMemory: true

下面是我的示例代码

Feature: File upload

  Background:
    Given url baseUrl
    # initiate authentication
  
  @form-data
  Scenario: Uploading file 
    * def filePath = 'classpath:file.txt'
    * configure headers = {'Authorization': '#(authorization)', Accept: 'application/json'}}
    Given path fileConversionApi
    And multipart file file = { read: '#(filepath)', filename: 'file.txt', contentType: 'multipart/form-data' }
    When method post
    Then status 200
    Then print response

我尝试将

* configure charset = null
添加到空手道测试中,但它仍然在多部分请求中发送 utf-8。我还观察到内容长度与邮递员发送的请求和空手道发送的请求不同。例如,邮递员中的相同请求的内容长度为 773,而从空手道发送的请求的内容长度为 750。

有没有人经历过类似的事情,其中多部分请求适用于邮递员但不适用于空手道?

karate
1个回答
0
投票

我检查了,下面的这段代码显示

* configure charset = null
有效,我认为在旧版本的空手道中这确实是一个问题。我试过1.4.1

* configure charset = null
* url 'https://httpbin.org/anything'
* multipart file myFile = { value: 'xxx' }
* method post

如果注释掉第一行,您可以看到差异。所以尝试升级。

有关多部分故障排除的更多提示,请参阅:https://stackoverflow.com/a/78547136/143475

© www.soinside.com 2019 - 2024. All rights reserved.