From adad09779d92a74b617a9af4076555f806b97071 Mon Sep 17 00:00:00 2001 From: song-tianyang Date: Tue, 20 Sep 2022 15:38:59 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=8E=A5=E5=8F=A3=E6=B5=8B=E8=AF=95):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8Dhar=E6=96=87=E4=BB=B6=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E6=97=B6multipart=E7=B1=BB=E5=9E=8B=E7=9A=84=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E6=97=A0=E6=B3=95=E5=AF=BC=E5=85=A5=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --bug=1016948 --user=宋天阳 [接口测试]#17975post,form-data的接口,har格式导入metersphere,接口请求参数是空的,没有导入成功 https://www.tapd.cn/55049933/s/1246752 --- .../api/dto/definition/parse/HarParser.java | 50 ++++++++++++++++--- 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/parse/HarParser.java b/backend/src/main/java/io/metersphere/api/dto/definition/parse/HarParser.java index e2c94a1a67..f5a9b6ea02 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/parse/HarParser.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/parse/HarParser.java @@ -203,14 +203,36 @@ public class HarParser extends HarAbstractParser { body.getKvs().add(kv); } } else if (contentType.startsWith(org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE)) { - contentType = org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE; - List postParams = content.params; - if (CollectionUtils.isNotEmpty(postParams)) { - for (HarPostParam postParam : postParams) { - KeyValue kv = new KeyValue(postParam.name, postParam.value); - body.getKvs().add(kv); + if (contentType.contains("boundary=") && StringUtils.contains(content.text, this.getBoundaryFromContentType(contentType))) { + contentType = org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE; + String[] textArr = StringUtils.split(content.text, "\r\n"); + String paramData = this.parseMultipartByTextArr(textArr); + JSONObject obj = null; + try { + obj = JSONObject.parseObject(paramData); + if (obj != null) { + for (String key : obj.keySet()) { + KeyValue kv = new KeyValue(key, obj.getString(key)); + body.getKvs().add(kv); + } + } + } catch (Exception e) { + obj = null; + } + if (obj == null) { + body.setRaw(paramData); + } + } else { + contentType = org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE; + List postParams = content.params; + if (CollectionUtils.isNotEmpty(postParams)) { + for (HarPostParam postParam : postParams) { + KeyValue kv = new KeyValue(postParam.name, postParam.value); + body.getKvs().add(kv); + } } } + } else if (contentType.startsWith(org.springframework.http.MediaType.APPLICATION_JSON_VALUE)) { contentType = org.springframework.http.MediaType.APPLICATION_JSON_VALUE; body.setRaw(content.text); @@ -231,6 +253,22 @@ public class HarParser extends HarAbstractParser { body.setType(getBodyType(contentType)); } + private String getBoundaryFromContentType(String contentType) { + if (StringUtils.contains(contentType, "boundary=")) { + String[] strArr = StringUtils.split(contentType, "boundary="); + return strArr[strArr.length - 1]; + } + return null; + } + + private String parseMultipartByTextArr(String[] textArr) { + String data = null; + if (textArr != null && textArr.length > 2) { + data = textArr[textArr.length - 2]; + } + return data; + } + private void parseResponseBody(HarContent content, Body body) { if (content == null) { return;