范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

自己能调通接口,别人调不通?

  原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。   场景
  有时我们开发了一个api接口,自己调得好好的,接口文档也写好了,但别人调用时就是有问题,而当我们调试时,发现请求根本没进来或进来了却取不到调用参数,该怎么告知对方调用姿势哪不对呢?  解决方法
  对于编码新手,一般会和对方撕扯一会,然后甚至去review对方的代码,这样也许能解决问题,但自己毕竟不熟悉别人系统的实现,耗费时间较长。
  另外api调用端可能因为封装方式不同或者加过一些拦截器,导致你看调用端的代码根本看不到什么问题,或者因为调用参数有一些不易分辨或不可见的特殊字符,让你无法察觉到这里有问题。
  其实这种问题,我们从网络层出发,对比自己正确调用时的数据包与对方错误调用时的数据包内容,以此来诊断问题所在更加高效,毕竟任何封装或拦截器的处理,最终都会反馈在底层的交互数据上。
  这里,我使用springmvc开发一个简单的接口,如下:  @RestController public class TestController {     @RequestMapping(value = "/test",produces = MimeTypeUtils.TEXT_PLAIN_VALUE)     @ResponseBody     public String test(@RequestParam(name = "name") String name){        return name;     } }
  这个接口就是直接将name参数的值返回了,然后我使用curl模拟正确与错误的调用方式,如下:  #正确调用方式 $ curl http://localhost:8081/test --data-urlencode "name=a+b" a+b #错误调用方式 $ curl http://localhost:8081/test --data "name=a+b"  a b
  假设调用方的代码实现的逻辑类似上面错误的调用方式,传递name参数为a+b,得到的却是a b,接下来我们来定位看看,错误的调用方法问题在哪?
  方法1:使用wireshark抓包软件
  打开wireshark,先后抓包两次正常的以及不正常的请求数据,拿到请求数据后通过文本差异对比工具来对比。 如下为wireshark两次抓包结果,使用追踪流 -> TCP,查看HTTP请求数据
  如下为正确的HTTP请求数据,其中红色为请求数据,蓝色为响应数据
  如下为错误的HTTP请求数据
  对比请求数据差异
  可以看出,一个请求name参数为a%2Bb,一个请求name参数为a+b,显然这是由于name参数值没有url_encode导致的。
  另外或许你会奇怪,为啥错误请求值为a+b,为啥代码里面获取到的却是a b? 原因是tomcat接收到请求参数后,会做一次url_decode,而+号会被decode为空格,java的 URLDecoder.decode("a+b", "UTF-8") 也是如此。
  方法2:使用socat命令
  在抓包工具无法使用的情况下,可以尝试socat命令,使用socat命令来中转请求,调用端将请求先发给socat,socat再把请求转给服务端,如下: # 使用socat中转请求 $ socat -v TCP4-LISTEN:8080,bind=0.0.0.0,reuseaddr,fork TCP4:localhost:8081  # 调用端访问socat监听的8080端口 # 正确调用方式 $ curl http://localhost:8080/test --data-urlencode "name=a+b" a+b # 错误调用方式 $ curl http://localhost:8080/test --data "name=a+b"  a b
  再去看socat,会发现如下结果:
  其中socat添加-v参数后,会自动将中转的数据流以明文显示出来,其中类似 > 2020/10/11 13:05:03.536294 length=162 from=0 to=161 之后的部分,就是请求数据,而类似< 2020/10/11 13:05:03.740585 length=116 from=0 to=115 之后的部分,就是响应数据,同样的,你可以将两次请求数据复制到文本对比工具中去发现差异。
  有时这种调用差异是特殊字符导致的,比如空白字符、零宽字符,上面的方式可能看不出差异,这时你可以将-v参数替换为-x参数,来对比数据的十六进制,同样的wireshark也可以查看数据包的十六进制,相信你摸索一下也可以找到。  举一反三
  此外,有些时候,我们写的代码去查询数据库时,查不到数据,但我们把SQL拿到数据库客户端工具中,却可以查到数据,这种问题极有可能是SQL被底层一些拦截器改写了,这时,我们也可以使用上面的方法来确认,这里仅仅介绍使用socat的方式,如下,使用socat中转数据库连接:  # 1.中转数据库连接 $ socat -v TCP4-LISTEN:3307,bind=0.0.0.0,reuseaddr,fork TCP4:localhost:3306 2>&1 | tee data.log # 2.然后我们代码中连接数据库的地方,将端口改成3307,然后执行我们的SQL查询  # 3.查看真实发送给数据库的SQL cat data.log |grep -i "select"
  结果如下:
  我相信到这一步,大概能发现SQL差异了,接下来就是找到底层修改SQL的代码在哪,以及如何处置了。  总结
  遇到这种网络调用上的差异问题,多多考虑使用wireshark、socat、ncat之类的网络工具来处理,相信问题处理效率会大大增加。

再拓新境!汉EV旗舰型加推5G丹拿智能音乐座舱升级包2021年8月29日,比亚迪携DiLink4。0(5G)和为汉EV四驱高性能版旗舰型倾力打造的5G丹拿智能音乐座舱升级包,在成都车展正式上市。5G丹拿智能音乐座舱升级包包含5G速联欧拉闺蜜局火爆成都车展!引众多女性踊跃打卡8月29日,三年而立的欧拉,以一场前所未有的闺蜜局,在成都车展上玩出了新花样,用更走心的展台布置更懂女性的闺蜜之车更宏伟的她商业生态,再次刷新了更爱女人的价值新认知!打卡闺蜜局,网潮动蓉城,乐享真诚!捷途X90PLUS成都车展开启预售2021年8月29日成都车展盛大开幕,捷途汽车首次以独立品牌的身份亮相国内4大A级车展,并在车展开幕首日强势开启捷途X90PLUS预售,预售价10。29万元14。09万元。捷途X9中国首款女性定制SUV风行T5EVO女神版发布近年来,随着女性消费力量的持续崛起,一向被认为是男性自留地的汽车领域也掀起了一阵阵的她浪潮。在8月29日开幕的成都车展上,东风风行携中国首款女性定制SUV风行T5EVO女神版惊艳亮一辆搭载8155芯片和30英寸三联大屏的紧凑型SUV是什么体验?近日,MGONE内饰图曝光,数智运动和科技时尚感溢出屏幕,展现出这款智潮科技SUV数智孪生双面时空的多元内心世界。MGONE通过同级首次搭载的高通骁龙8155旗舰芯片30英寸环抱式超感新运动SUV长安欧尚X5推运动版,成都车展重磅亮相8月29日,向尚进行时的长安欧尚X5运动版亮相品鉴会在第二十四届成都国际车展举行,长安欧尚X5运动版橙风破浪魅力闪耀,圈粉蓉城。新车带来全新的个性化升级,以动感竞速的姿态进一步丰富秀出我精彩,凡尔赛C5X变装惊艳亮相成都车展8月29日,第二十四届成都国际汽车展览会启幕,东风雪铁龙携五色凡尔赛C5X和两辆凡尔赛C5X改装版齐聚展台。鎏金绿太空银珠光白青岩灰星夜蓝五色凡尔赛C5X以及两辆凡尔赛C5X改装版尖叫感时代看Q萌可爱的奇瑞QQ冰淇淋如何性感向上8月29日,西南地区最具人气的成都车展终于拉开帷幕,众多汽车厂商都祭出自己的看家神器。其中,奇瑞iCar生态带来两款以创新性思维设计,针对不同使用场景需求打造的场景车奇瑞QQ冰淇淋第二代GS8王者再进化GPMA架构L平台首款高端SUV亮相成都车展2016年10月,第一代传祺GS8上市,这款车型在上市前就备受期待,未卖先火。在当时的情况下,自主品牌中高端7座中大型SUV的市场一直是合资品牌的天下,传祺GS8的出现并取得重大反王者再临2022款CS75PLUS正式上市售价11。79万元起如果问哪款车是长安的现象级车型,大家会想到谁?每个人的回答都各不相同,在我看来,长安CS75PLUS是长安的现场级车型。长安汽车A级SUV明日座驾CS75PLUS自2019年正式上智见新可能林肯品牌携三款重磅新车及个性互动体验潮动2021成都车展稳中求变,智见新可能。8月29日,2021年下半年首场重量级汽车盛会成都国际车展正式拉开帷幕。作为美式豪华领导品牌,林肯顺应消费升级的市场趋势,推出更年轻更个性化的产品,不断丰富产
乔布斯27年前的采访被曝光我不看中钱微软没品位最近B站上有一段特别火的遗失的乔布斯的采访,采访发生在其被排挤出苹果10年后(1985年,乔布斯被自己引荐的CEOJohnSculley排挤出苹果),重掌苹果的2年前(采访过后的1分子动理论的基本内容一物体是由大量分子组成的我们在初中已经学过,物体是由大量分子组成的。需要指出的是在研究物质的化学性质时,我们认为组成物质的微粒是分子原子或者离子。但是,在研究物体的热运动性质和规律从一升一降看广东科技新走势原标题从一升一降看广东科技新走势4月15日上午,全省科技创新大会在广州召开,会上颁发了2021年度广东省科学技术奖180个获奖项目(人),与上一年度持平,其中自然科学奖22项技术发vivoXFold折叠屏旗舰综合体验后发者能先至否?进入2022年,Top手机品牌纷纷扎入折叠屏手机市场,以多旗舰策略继续冲击高端,而市场份额一度登顶的vivo却迟迟不见动静。vivo官方表示,折叠屏方案在不断推倒重来中潜心打磨,旨天玑9000自研芯vivoX80系列跑分样张曝光韩伯啸透露迭代规则没想到vivo这次新机发布可能会这么密集,就在vivoXNote首款折叠屏新机vivoXFold以及首款平板电脑vivoPad等三款旗舰级新品之后,近日关于vivoX80系列的爆料2799起,骁龙8独显80W快充助力,iQOONeo6无敌了对于当下的智能手机市场,只能说友商们的内卷真的是越来越过了,尤其是在中端市场的表现很是激进。自红米K50系列发布以后,中端市场的惊喜就从未间断过,比高端市场还要更有料。在红米K50超大屏幕新机vivoXNote发售,vivoX60提前来砸场,大米价再现发布一款全面表现出色vivoXNote大屏旗舰机不仅是目前市面上唯一一款采用骁龙8Gen1的7英寸大屏商务旗舰,发布一款全面表现出色vivoXNote大屏旗舰机还拥有蔡司专业影像轻OPPOK10K10Pro入网首发天玑8000,将于下周发布4月15日消息,近日OPPOK系列新机K10K10Pro出现在了工信部的页面中。OPPOK10将首发联发科天玑8000处理器,搭载一块6。59英寸1080P分辨率LCD屏幕,120一分钟资讯华为苹果小米魅族一加中兴,最新消息哈喽,我是毛小毛。关注我,每日带你了解最新数码资讯!一分钟资讯第318篇,感谢你的阅读。华为Mate50Pro外观曝光近日,设计师Hoiindi基于一份尚待进一步证实的爆料,绘制了华为将为旧手机推新功能3步解决卡顿日前,华为将为用户推出最新的功能,以解决容量不足以及卡顿的问题。这项新功能为系统云翻新,用户可以通过云备份等操作,上传所有数据后恢复出厂设置,再恢复数据,最终清理掉手机中的垃圾,解小米12ultra要搞大动作近日有关小米12ultra的爆料越来越多,雷总也在社交平台疯狂推销存货11ultra,可以预见距离这一新影像旗舰发布也不远了。ultra系列作为小米高端系列,主打高性能影像,在上一