Karate Lab技术问询:如何发送二进制文件而非多部分表单?
在Karate中直接发送二进制文件(非Multipart表单)的实现方法
问题描述
我参考了upload.feature示例,但发现Karate默认的上传方式是Multipart表单请求。当前我的Karate脚本实现如下:
Scenario: Successul * karate.log(token, auth, common_headers) Given url 'https://webhook.site/e026040f-68ac-45e9-8add-c839fd46f0ba' And multipart field image = read('images/img1.png') And header Content-Type = 'image/png' When method PUT Then status 200
该脚本对应的curl命令(来自Postman)为:
curl --location --request PUT 'https://staging-ah.naluri.net/food-journal/upload?x-pri-id=qedSdhZU7UmXXztqFJyJw&x-verify-id=P2KUBtR07Qqk3j6U7tGrG' \ --header 'Content-Type: image/png' \ --form 'file=@"/Users/dennis.dao/workspace/repo/sample/karate-ui-sample/images/img1.png"'
但我实际需要实现的是直接发送二进制文件的请求,对应的curl命令如下:
curl --location --request PUT 'https://staging-ah.naluri.net/food-journal/upload?x-pri-id=qedSdhZU7UmXXztqFJyJw&x-verify-id=P2KUBtR07Qqk3j6U7tGrG' \ --header 'Content-Type: image/png' \ --data '@images/img1.png'
请问怎么在Karate里实现这种直接发送二进制文件的请求?
解决方案
要实现直接发送二进制文件作为请求体,无需使用multipart相关语法,直接通过request关键字绑定读取的二进制文件内容即可,具体步骤如下:
- 用
read()方法读取二进制文件,Karate会自动识别并处理文件的二进制内容 - 通过
request关键字将读取的内容设置为请求体 - 设置与文件匹配的
Content-Type请求头
修改后的Karate脚本如下:
Scenario: Successful binary file upload * karate.log(token, auth, common_headers) Given url 'https://staging-ah.naluri.net/food-journal/upload?x-pri-id=qedSdhZU7UmXXztqFJyJw&x-verify-id=P2KUBtR07Qqk3j6U7tGrG' And request read('images/img1.png') And header Content-Type = 'image/png' When method PUT Then status 200
说明
read('images/img1.png')会直接读取文件的二进制内容,无需额外转换处理request关键字会将该二进制内容作为整个请求体发送,完全对应curl --data '@file'的行为- 需确保
Content-Type头设置为文件对应的MIME类型(示例中为image/png),与目标接口要求一致
内容的提问来源于stack exchange,提问作者simbataisa
相关产品推荐
相关产品推荐

