1.概述
最近在测试接口时,发现通过页面提交中文是正常的,Postman 提交的中文就乱码,为了搞清楚具体问题,使用wireshark分别对不同的请求方式进行了数据包分析。
2 Wireshark抓取 本地Localhost 的方法
我们都知道wireshark 是通过网卡进行 抓包的,而localhost (127.0.0.1) 比较特殊。属于本地回环地址。不经过网卡,那么怎么抓包呢。下面就如何抓包进行总结。
借助第三方工具RawCap.exe 抓取 pcap 包。
下载地址:https://www.netresec.com/index.ashx?page=RawCap
使用方法:
cd 到 RawCap.exe 所在目录
执行:
.\RawCap.exe 127.0.0.1 localhost_capture.pcap
也可以直接执行 RawCap.exe 通过 控制台的方式选择网络接口

生成的数据包如图。
3 wireshark 数据包分析
使用wireshark 打开pcap 包。

过滤http 请求

可以根据数据包大小排序,然后查看报文。

选择要查看的报文,右键选择追踪流- HTTP流。
通过对比报文头,报文体信息,可以分析具体差异在哪里。
4 请求头问题
POST 请求下,容易造成乱码的就是Content-Type , 需要注意Content-Type 的值。
当Content-Type : application/x-www-form-urlencoded 时,没有加字符编码,容易导致乱码。
正确写法为:Content-Type : application/x-www-form-urlencoded ; charset=UTF-8
本次后端还使用了字符集过滤器,但是没有设置Content-Type时, Postman 请求还是会发生乱码。
5 Tomcat 设置编码问题
Tomcat 设置编码URIEncoding 并不能解决 post 方式的请求,但可以解决get 方式的请求,但是这种方法不是很推荐,最好统一使用过滤器处理。
6 返回数据乱码
返回数据乱码通常是没有设置响应头类型,加上 Content-Type: text/html; charset=utf-8 即可。
7 Http 请求头常用说明
application/json:消息主体是序列化后的 JSON 字符串
application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式
multipart/form-data: 需要在表单中进行文件上传时,就需要使用该格式。常见的媒体格式是上传文件之时使用的
text/plain:数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符。
application/x-www-form-urlencoded:是Jquery的Ajax请求默认方式,目前大部分浏览器支持的也是这种方式。
当action为get时候,客户端把form数据转换成一个字串append到url后面,用'?'分割。
当action为post时候,浏览器把form数据封装到http body中,然后发送到server。
本文探讨了使用Postman提交中文请求出现乱码的问题,通过Wireshark进行数据包分析,发现乱码可能源于Content-Type设置不正确。解决方案包括设置Content-Type为`application/x-www-form-urlencoded; charset=UTF-8`,以及注意Tomcat的编码配置。同时,文章还提到了HTTP请求头的常见应用。
1530

被折叠的 条评论
为什么被折叠?



