postman請求提交用表單方式提交(List對象)格式的數據 & 使用wireshark抓包工具 & 使用MOCKMvc測試文件上傳功能


使用wireshark抓包工具

 

 

————————————————————————————————————————————————————————————————————

wireshark說明三次握手:

https://www.cnblogs.com/zhangxingeng/p/11200063.html  (Flag的說明見下面的標識)

 

在TCP層,有個FLAGS字段,這個字段有以下幾個標識:SYN, FIN, ACK, PSH, RST, URG.

其中,對於我們日常的分析有用的就是前面的五個字段。

 

含義:

SYN 表示建立連接,

FIN 表示關閉連接,

ACK 表示響應,

PSH 表示有 DATA數據傳輸,

RST 表示連接重置。

 

其中,ACK是可能與SYN,FIN等同時使用的,比如SYN和ACK可能同時為1,它表示的就是建立連接之后的響應,

如果只是單個的一個SYN,它表示的只是建立連接。

TCP的幾次握手就是通過這樣的ACK表現出來的。

但SYN與FIN是不會同時為1的,因為前者表示的是建立連接,而后者表示的是斷開連接。

RST一般是在FIN之后才會出現為1的情況,表示的是連接重置。

一般地,當出現FIN包或RST包時,我們便認為客戶端與服務器端斷開了連接;而當出現SYN和SYN+ACK包時,我們認為客戶端與服務器建立了一個連接。

PSH為1的情況,一般只出現在 DATA內容不為0的包中,也就是說PSH為1表示的是有真正的TCP數據包內容被傳遞。

TCP的連接建立和連接關閉,都是通過請求-響應的模式完成的。

 

TCP三次握手:

TCP(Transmission Control Protocol)傳輸控制協議

TCP是主機對主機層的傳輸控制協議,提供可靠的連接服務,采用三次握手確認建立一個連接:

位碼即tcp標志位,有6種標示:SYN(synchronous建立聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重置) URG(urgent緊急)Sequence number(順序號碼) Acknowledge number(確認號碼)。

第一次握手:主機A發送位碼為syn=1,隨機產生seq number=1234567的數據包到服務器,主機B由SYN=1知道,A要求建立聯機;

第二次握手:主機B收到請求后要確認聯機信息,向A發送ack number=(主機A的seq+1),syn=1,ack=1,隨機產生seq=7654321的包;

第三次握手:主機A收到后檢查ack number是否正確,即第一次發送的seq number+1,以及位碼ack是否為1,若正確,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到后確認seq值與ack=1則連接建立成功。完成三次握手,主機A與主機B開始傳送數據。

在TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接。
第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。完成三次握手,客戶端與服務器開始傳送數據.

 

 

 

————————————————————————————————————————————————————————————————————————————————————————————————————————————————

postman請求提交用表單方式提交(List對象)格式的數據 

1.demo

package com.aa;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Getter
@Setter
@ToString
public class StaffAddVo implements Serializable {
    private List<Position> positionIdList;

    @Getter
    @Setter
    @ToString
    public static class Position{
        private String id;
        private String name;
    }
}

 

2.postman測試傳參
傳參格式示例:
positionIdList[0].id
positionIdList[0].name

 

 

3.測試結果

 

 4.總結

List<Map<String,object>> 格式接收不到參數,改成List<對象>的格式,即可接收

5.文章參考鏈接
https://blog.csdn.net/zsigner/article/details/79606501

 

 

 

____________________________________________________________________________________________________________________________________________________________________________________________________

 

 
         

使用MOCKMvc測試文件上傳功能
關鍵點:

MockMvcRequestBuilders.fileUpload(“你的接口地址”).file(MockMultipartFile)

MockMultipartFile(String name, String originalFilename, String contentType, InputStream contentStream),這個構造方法中第一個值name注意要對應接口中的MutipartFile file參數的名字,否則會上傳失敗。


@Test
public void fileTest() throws Exception { ResultActions resultActions = mockMvc.perform(MockMvcRequestBuilders.fileUpload("/SSM/api/file/upload"). file(new MockMultipartFile("file", "test", "application/ms-excel", new FileInputStream(new File("C:/Users/Administrator/Desktop/test.xls"))))); MvcResult mvcResult = resultActions.andDo(MockMvcResultHandlers.print()).andExpect(MockMvcResultMatchers.status().isOk()).andReturn(); String result = mvcResult.getResponse().getContentAsString(); System.out.println("==========結果為:==========\n" + result + "\n"); }

 

 

@Controller
public class NewController {  
@RequestMapping(value = "/upload", method = RequestMethod.POST)    
@ResponseBody    
public String saveAuto(@RequestPart(value = "json") JsonPojo pojo,@RequestParam(value = "some-random") String random,@RequestParam(value = "data", required = false) List<MultipartFile> files) 
{        
  System.out.println(random);        
  System.out.println(pojo.getJson());        
  for (MultipartFile file : files) {            
  System.out.println(file.getOriginalFilename());        
  }
  return "success"; } static class JsonPojo {   private String json;   public String getJson(){return json;}   public void setJson(String json){this.json = json;}   } } @WebAppConfiguration
@ContextConfiguration(classes
= WebConfig.class)
@RunWith(SpringJUnit4ClassRunner.class) public class Example { @Autowired
private WebApplicationContext webApplicationContext;
@Test
public void test() throws Exception {   MockMultipartFile firstFile = new MockMultipartFile("data", "filename.txt", "text/plain", "some xml".getBytes());   MockMultipartFile secondFile = new MockMultipartFile("data", "other-file-name.data", "text/plain", "some other type".getBytes());   MockMultipartFile jsonFile = new MockMultipartFile("json", "", "application/json", "{\"json\": \"someValue\"}".getBytes());   MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();   mockMvc.perform(MockMvcRequestBuilders.fileUpload("/upload")   .file(firstFile)   .file(secondFile)   .file(jsonFile)   .param("some-random", "4")
)   .andExpect(status().is(
200))   .andExpect(content().string("success")); }}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM