原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明。
问题发生
上上周,看到一位老哥找我们组同事联调接口,不知道是什么问题,两人坐一起搞了快1个小时,看起来好像有点复杂。
突然,老哥发出一声卧槽,"我传参里的+号,到你这怎么变成了空格!",这个声音很大,我明显的听到了,很快,我就大概Get到了他们的问题点。
我猜测他们遇到的问题大概如下:
- 我们的接口协议上,都会将请求数据做一次base64编码,然后放到data参数上。
- 然后某些数据做base64编码后有
+
,如{"notes":"代码"}
base64编码为eyJub3RlcyI6IuS7o+eggSJ9Cg==
。 - 然后直接拼到data参数上,即
data=eyJub3RlcyI6IuS7o+eggSJ9Cg==
,组织成http请求发出。
如果写成等价的curl,就是这样:
$ curl http://localhost:8080/send -d 'data=eyJub3RlcyI6IuS7o+eggSJ9Cg=='
写个测试接口调试下看看,如下:
这就是他们遇到的问题,+
会变成空格,这个坑其实蛮容易踩到,我自己刚工作时就踩到过这个坑,也多次看到或听到别人同踩此坑