接口测试 [已解决] rest assured 如何设置 Content-Disposition

紫殇情结 · 2018年12月07日 · 最后由 大鹏 回复于 2020年03月20日 · 2303 次阅读

求助

最近在用 rest assured 来做接口测试,其中有一个接口是需要上传文件的,但是发现上传的文件如果包含中文,服务端收到的文件名会变成乱码,导致服务端无法往后走,请教各位该怎么设置?
Query 如下:

File f = new File("testdata/20121115王刚11.doc");
        InputStream is = new FileInputStream(f);
        String fileName = f.getName();

        given().filter(new AllureRestAssured()).log().all()
                .config(config)
                .contentType("multipart/form-data;charset=utf-8")
                .queryParam("caseName", "apitest")
                .multiPart("documentations",
                        fileName, is, "application/msword")
        .when()
                .post("/caseAnalysis/addCase")

log 如下:

Request method: POST
Request URI:    http://u********.com/api/caseAnalysis/addCase?caseName=apitest
Proxy:          <none>
Request params: <none>
Query params:   caseName=apitest
Form params:    <none>
Path params:    <none>
Headers:        Accept=*/*
                Content-Type=multipart/form-data;charset=utf-8
Cookies:        <none>
Multiparts:     ------------
                Content-Disposition: form-data; name = documentations; filename = 20121115王刚11.doc
                Content-Type: application/msword

                <inputstream>
Body:           <none>

已解决

使用如下设置即可

RestAssured.config = RestAssuredConfig.config()
                .httpClient(HttpClientConfig.httpClientConfig()
                        .httpMultipartMode(HttpMultipartMode.BROWSER_COMPATIBLE));
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 6 条回复 时间 点赞

header 里面可以设置 Content-Disposition 值,好像 Content-Disposition 里也有编码

ThreeClick 回复

我也看到了 好像是要设置 Content-Disposition,但是怎么设置呢?

这样试试看

File f = new File("testdata/20121115 王刚 11.doc");
InputStream is = new FileInputStream(f);
String fileName = f.getName();

given()
.config(config)
.contentType("multipart/form-data;charset=utf-8")
.queryParam("caseName", "apitest")
.multiPart(f)
.when()
.post("/caseAnalysis/addCase")

ThreeClick 回复

也不对

抓包对比下吧,报文发出来看看

我用这个不行,用这个模式才行。

RestAssured.config = RestAssuredConfig.config()
        .httpClient(HttpClientConfig.httpClientConfig()
                .httpMultipartMode(HttpMultipartMode.RFC6532));
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册