curlとかでAPI叩いた時クエスチョンマークがたくさん出る系の文字化けの対処法

エアコンのフィルター掃除を誰か手伝って。
どうも、伊藤くんです。

今回は、curlとかでAPI叩いた時にクエスチョンマークがいっぱい出る文字化け?の対処法を突き止めたのでメモします。

最初に結論

リクエストヘッダの「accept-encoding: br」てのを消すと解決です。

事件はこうして起こった

みなさんchromeのデベロッパーツールの「Copy as cURL」機能は使ってますか?
Networkタブで指定したリクエストをcurlで再現してくれるやつです。

これでcurlコマンドがクリップボードにコピーされるので、あとはターミナルで貼り付けて実行するだけで、実際にブラウザから送信されたリクエストと同じリクエストを送信することができます。
ヘッダーやらクッキーやらとにかく細かく再現してくれるので、ターミナルの一画面に収まりきらないほど長いコマンドになります。

さて、この便利な機能を活用して伊藤くんはいつも通り開発に勤しんでいたわけですが、ここで事件が起こりました。

以下のように、レスポンスがクエスチョンマークと謎の記号で埋め尽くされて返ってきたのです。

ひいいいって感じです。

chromeのNetworkタブで見た時は綺麗なjsonで返ってきてたのに…なにゆえコマンドで実行するとこうなるのか…

解決策

犯人はリクエストヘッダにある「accept-encoding: br」というやつでした。
これを消すことで、普通にjsonが返ってくるようになりました。

この現象で悩まされているすべての人がこの方法で解決するとはあまり思えませんが、とりあえず試してみてください。

最後に

そもそもブラウザから送信されたリクエストにも「accept-encoding: br」は付いていたわけですが、なぜブラウザはちゃんとjsonで受け取れていたのかは謎です。
伊藤くんはあまり原理主義ではないのでその辺の原因の究明はしていません。

あと今回いろいろあがいた過程で、Postmanを初めて使ってみました。
めっちゃ便利なので、みなさんも是非使ってみてください。今回の問題もこれを使って解決に至りました。

Postman : https://www.getpostman.com/
ステマみたいになりましたが別にアフィとかではないですよw

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です