Я пытаюсь загрузить файл через API многочастного почтового запроса в каратэ, однако я получаю ответ 400 - ошибка, указывающая, что файл находится в неправильном формате, точнее, ошибка типа mime файла. Но когда я нажимаю на тот же API в почтальоне с тем же файлом, он работает нормально, без каких-либо ошибок. Кто-нибудь знает, какая причина может вызвать эту проблему? Входные данные API представляют собой файл в форме данных.
Я проверил заголовки обоих звонков от почтальона и карате, проблем не обнаружено - они одинаковые. Однако я заметил, что multipart из karate отправляет 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