🤖
特定のリクエストの時に、HTTPヘッダーを付与する
きっかけ
自分のサイトへのHTTPリクエスト時にHTTPヘッダーに追加情報を載せたかった。
- アプリのバージョンを付与する
- 機種名を付与する
- HTTPS使用時に、認証用トークンを付与して、APIとWebでログインできるようにする
など。
実装したもの
試行錯誤
HTTPリクエストを投げる時によく使うAlamofire
とかAFNetworking
とかは比較的簡単にヘッダを付与できる。
ただ、UIWebView
でWebページを表示しているケースでの付与が大変だった。
-
UIWebView
を継承したクラスのloadRequest
でごにょごにょ -
shouldStartLoadWithRequest
でごにょごにょ - 隠しdelegate使ってごにょごにょ
とか見つけたんだけど全体的に微妙…。
そんな中で見つけたのが
NSURLProtocolを使う
だった。
今回、自分のサイトに設置してあるAPI/Webへのリクエストの時のみ色々付与したかったのでもの凄くマッチした。
応用も効きそうなのでPod化しておいた。
ざっくりな流れ
-
canInitWithRequest
で自分の作ったProtocolを適用するか決める -
startLoading
でリクエストの開始 -
stopLoading
でリクエストの終了 - 適当なタイミングで、
NSURLProtocolClient
のメソッドを呼ぶ
詳しいコードは、
で。
まとめ
NSURLProtocolで通信をフックしてごにょごにょしよう!
Discussion