URLComponentsは、`+`をPercent Encodingしてくれない
経緯
APIを叩く際にランダムに生成しな内容をBASE64化してQueryにつけて送信しようとしていたが、5割ぐらいのエラーになっていた。
調査した結果、+
がPercent Encodingされていないためだったが、なぜこんなことが起きたのか…。
便利なURLComponentsの罠
この記事でURLComponents
という便利なものがある!自前でPercent EncodingしてQuery作らなくていいんだ!とうっきうきで使っていたわけだが、+
はPercent Encodingしてくれない。(ちなみに+
をPercent Encodingすると%2B
になる)
なぜ起こったか
今回のようなことが何故起こったのか。
URLComponents
は、説明にRFC 3986
に準拠していると記載されている。サーバ側がRFC 3986
に準拠していない作りが理由とも言えるし、自分がそこを確認怠り、URLComponents
を使用したのが理由とも言える。
URLComponents - Foundation | Apple Developer Documentation
サーバの作り次第で、このあたりはいくらでも変わるので、気をつけたいところ。
今回は、時間やコードの手戻りが厳しいこともありURLComponents
でQueryを付けた後、+
を%2B
に置換する力技で解決した。
URLComponents
に頼らない自作URLComponentsのようなものを作ってもいいかもしれないと思った。