一、charles抓包,postman重放
参考文章:从charles等抓包工具中请求地址复制为CURL粘贴至postman可直接生成接口请求
1、右键请求 -> Copy cURL Request。得到curl的格式的请求数据
2、然后去postman导入这个curl的数据
3、然后粘贴到Raw text
最后一个postman的请求就构造出来了。
二、postman请求失败,curl请求成功
我的问题现象就是postman构造出来的请求,用postman直接请求一直报400,但是通过curl就可以正确的访问。
问题就出在header身上,我发现hostman的请求header里面没有host,并且生成的curl的指令,也没host。那么为啥两个都没host字段的请求,postman请求失败,curl就成功呢?
猜测:curl会不会自动添加上域名作为host呢?网上也没收到答案,解决方案就是在postman的header中添加host,然后postman和curl都能请求成功。
三、同一个Curl命令,POST请求,不同客户端请求不一样。
背景:相同的curl命令,用云容器发起和本地mac发起,对于get请求没啥问题。但是对于POST请求mac本地ok,云容器发起能找到服务,但是post请求的body丢失,导致spring mvc处理失败。
发现过程:
1、云容器发起post请求,提示body is missing。然后试试本地发起,请求ok
2、使用curl -v 测试请求的详细过程进行比较。本地mac解析443端口是ip:255.96,而容器实例解析443端口是199.49。说明两个客户端在发起域名请求的时候,解析的nginx服务器不是同一个。
问题就显而易见了,容器实例访问的nginx,在转发post请求的时候,丢失了body信息,导致所有post请求在打到spring mvc后,拿不到body。
解决方案:可以参考http://linux.it.net.cn/m/view.php?aid=1514。修改nginx的配置,已经提给运维。
另外的解决:用postman得到curl,每个header后面默认加上 \,这个格式有些客户端不认。比如:mac的iterm和linux客户端