遇到的问题:
charles上的请求经过compose重发,并且有响应数据,但是将请求导出,移植到python代码或者是postman里面,始终报签名错误
解决过程:
因为headers的字段中带有冒号
类似
:method:post
:scheme: https
而带有冒号的字段是违反http协议的
带有冒号是http2的标准,所有python的requests库会直接报错,并且我也尝试了通过hyper进行转换,但是行不通,所有我就将headers字段中的冒号去掉了。
让我一度怀疑是否真的是签名出了问题,难道是将所有的headers字段中的一部分一起做签名,而代码里面的headers去掉了冒号,直接导致签出的sign值有所改变,所有服务端拒绝了。
最终解决方法:
原来charls中的body raw如下
body=%7B%22allLastTime%22%3A%220%22%2C%22barHeight%22%3A%2272%22%2C%22cycFirstTimeStamp%22%3A%221577267540470%22%2C%22cycNum%22%3A1%2C%22displayVersion%22%3A%228.0.0%22%2C%22fQueryStamp%22%3A%221577268411516%22%2C%22fringe%22%3A%221%22%2C%22geo%22%3A%22Iox15QNUfZ6i2hh6U3Jv7bZbnaH68QIf2xItEIee7FOpDVth34cgdEAhx%252BQOPcYw%22%2C%22geoLast%22%3A%22Wg84QX%252BhUt6jXYgbFCNQtiIqvakxlESzRfLgLuo9RCN%252BcxKXWGP7nwPbxEw5aUUu2x3S9al1LfEQ7WqC0OrWx5stmQYkRVPpCSKVEIBHehU%253D%22%2C%22homeAreaCode%22%3A%220%22%2C%22identity%22%3A%22352584065504034-34fceff43fb7%22%2C%22tSTimes%22%3A%222%22%7D
所有在用postman的时候 body部分要这么写
通过key-value输入body方法如下
key栏填写 body
value 栏填写urldecode后的内容,即:
{"allLastTime":"0","barHeight":"72","cycFirstTimeStamp":"1577267540470","cycNum":1,"displayVersion":"8.0.0","fQueryStamp":"1577268411516","fringe":"1","geo":"Iox15QNUfZ6i2hh6U3Jv7bZbnaH68QIf2xItEIee7FOpDVth34cgdEAhx%2BQOPcYw","geoLast":"Wg84QX%2BhUt6jXYgbFCNQtiIqvakxlESzRfLgLuo9RCN%2BcxKXWGP7nwPbxEw5aUUu2x3S9al1LfEQ7WqC0OrWx5stmQYkRVPpCSKVEIBHehU%3D","homeAreaCode":"0","identity":"352584065504034-34fceff43fb7","tSTimes":"2"}
即可拿到数据
通过批量编辑(Bulk Edit )输入body方法如下
body:{"allLastTime":"0","barHeight":"72","cycFirstTimeStamp":"1577267540470","cycNum":1,"displayVersion":"8.0.0","fQueryStamp":"1577268411516","fringe":"1","geo":"Iox15QNUfZ6i2hh6U3Jv7bZbnaH68QIf2xItEIee7FOpDVth34cgdEAhx%2BQOPcYw","geoLast":"Wg84QX%2BhUt6jXYgbFCNQtiIqvakxlESzRfLgLuo9RCN%2BcxKXWGP7nwPbxEw5aUUu2x3S9al1LfEQ7WqC0OrWx5stmQYkRVPpCSKVEIBHehU%3D","homeAreaCode":"0","identity":"352584065504034-34fceff43fb7","tSTimes":"2"}
即可拿到数据
如果想要抓包数据移植到代码中,建议使用charles提供的方法,点击该请求,右键,copy curl request(复制curl),然后通过一些在线的网站对curl request 做相应的转换,可以转为py, java等