我正在尝试通过空手道中的多部分发布请求 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。
有没有人经历过类似的事情,其中多部分请求适用于邮递员但不适用于空手道?
我检查了,下面的这段代码显示
* 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