由x-www-form-urlencoded引發的介面對接失敗

2023-03-18 12:02:27

原創:扣釘日記(微信公眾號ID:codelogs),歡迎分享,非公眾號轉載保留此宣告。

問題發生

這周正在寫程式碼,突然,旁邊小哥問我個問題...

  • 小哥:我這有個介面,自己呼叫沒有問題,但別人呼叫就不行,這種問題該如何排查?
  • 我:抓下包看看呢...
  • 小哥:是這樣使用tcpdump嗎?
  • 我:是的

待小哥抓到包後,使用wireshark開啟,並找到了相應的請求,類似如下:

然後我讓小哥將這個請求,使用curl發一個同樣的請求,看能不能復現這個錯誤,如下:

$ curl -X POST localhost:80/api \
      -H 'Content-Type: application/x-www-form-urlencoded' \
      -d 'eyJvcmRlcl9pZCI6MTIzNDU2Nzg5MDIxNDN9Cg=='

命令執行之後,重現了呼叫方一樣的介面報錯。

然後抓包小哥自己的正確請求是這樣的:

這裡很容易發現,別人調不通介面,小哥能調通,原因是別人的請求體裡面缺失data=這一段