count0.org

Alamofireでリダイレクトして欲しくない

05 April 2015 swift ios

Alamofire v1.2.0において、この記事で言及しているプルリクエスト相当のコードがマージ追加されました。よって、この記事自体がdeprecatedです。そしてAlamofireでリダイレクトさせたくない場合は以下のコードで済みました。

以下古い記事

Alamofire(v1.1.4)でHTTPステータスコードに従ってリダイレクトして欲しくないというレアケースかもしれない事態があって、こいつをどうするかという話です。

リダイレクト処理の実装サンプルは公式のドキュメントにあって、NSURLSessionの場合 URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:をdelegateで実装すればよくて、リダレクトさせたくない場合は前述のとても長いメソッドのcompleteHandlerでnilを返せばいいみたい。例えば以下のようなコード。

Alamofireのソースコードを眺めると、Alamofire.Manager.delegateがprivateに設定されている。ソースを触る必要があるかなと思案していたら、pull requestにprivateなメソッド、プロパティをpublicにして外側からいじれるようにしているのが上がっていた。これを使うと以下のように書ける。

cocoapodsでこのpull requestを使いたい場合はリポジトリとcommitを指定すればOKでした。

pod 'Alamofire', :git => 'https://github.com/jhersh/Alamofire.git', :commit => 'bbdee79eefff2fc4f57f392f6494473538850fae'

pull requestが取り込まれたり、別の実装方法が採用されるまでは、当分はこれでOK。

参考リンク