原創:扣釘日記(微信公眾號ID:codelogs),歡迎分享,非公眾號轉載保留此聲明。 問題發生 上上周,看到一位老哥找我們組同事聯調介面,不知道是什麼問題,兩人坐一起搞了快1個小時,看起來好像有點複雜。 突然,老哥發出一聲卧槽,"我傳參里的+號,到你這怎麼變成了空格!",這個聲音很大,我明顯的聽到 ...
原創:扣釘日記(微信公眾號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=='
寫個測試介面調試下看看,如下:
這就是他們遇到的問題,+
會變成空格,這個坑其實蠻容易踩到,我自己剛工作時就踩到過這個坑,也多次看到或聽到別人同踩此坑