シンプルなCFNetwork
ラッパーを公開します
色々事情があって,CFNetwork
のラッパーを書いて棄てたので公開します.
CFNetwork
とは
Cocoa
/Cocoa touch
ではNSURLConnection
っていうクラスがあって,基本的にはそれを使ってHTTPなどの通信をします.
Foundation
クラスはより低レイヤのCore Foundation
のラッパーなので,NSURLConnection
も実体はCFNetwork
になってます.つまり,CFNetwork
を使えばオリジナルなNSURLConnection
を作れるということです.
当初はいい感じにまとめて,ARC
対応のポストASIHTTPRequest
のポジションを狙おうと思ってたんだけど,ちょっとヘビーすぎて諦めました.ASIHTTPRequest
はマジでお化けプロダクトです.すごすぎる.
どういうときに使うべきかって言っておくと,CFNetwork
を使えばNSURLCache
とかNSURLProtocol
の動作を回避できます.その辺でゴニョゴニョやってるけどそれを回避したいなんてときに使えます.まあそっち側の仕組みでも回避できるんですが...
ちなみに,NSURLCache
とかNSURLProtocol
はNSURLConnection
を使った通信全てに適用されます.WebKit
などの通信もNSURLConnection
を使いますので,UIWebView
やAFNetworking
を使った通信もフックすることができます.
途中で力つきたのもあって,わりと適当です.そんなにしっかり動作検証してません(リダイレクトとか).CFNetwork
を使ったプログラミングのサンプル程度にどうぞ.ビーコンくらいには使えると思いますが,できることとできないことを書いておきます.できないことにはこうすればいいよ的なヒントも書いておくので,ヒマな人はアップデートしてください.
できること
- 簡単なHTTP通信
- Response Headerの取得
- HTTP status codeの取得
- Response Bodyの取得
- User Agentの設定
- Objective-Cから簡単に使える
NSURLRequest
を使って初期化(リクエストのヘッダになんか入れれば引き継がれます)- Blocksで終了/失敗時の動作を指定
- 同期/非同期通信
できないこと
- Basic等の認証の突破
- 401/407の段階で
CFAuthenticationRef
作ってゴニョゴニョしたあとリクエストを作り直せばいけると思います
- 401/407の段階で
- POST等GET以外のリクエスト
- これはわりと簡単に対応できると思う