xamarin.iOSでHTTP Clientする場合はNSURLConnectionを利用するべき。
今日もプログラムは書いてません。
昨日のエントリのmonotouch-samplesのHttpClientを見てみる。にあるサンプルで分かったことがある。
xamarin.iOSでHTTP Clientする場合はNSURLConnectionを使いましょう。
理由:WebRequestだとプロキシ経由のアクセスができない。
public partial class AppDelegate : UIApplicationDelegate{ //~~省略~~ void Button1TouchDown (object sender, EventArgs e){ //~~省略~~ new Cocoa (this).HttpSample (); //~~省略~~ } //~~省略~~ }
public class Cocoa : NSUrlConnectionDelegate{ AppDelegate ad; byte [] result; public Cocoa (AppDelegate ad){ this.ad = ad; result = new byte [0]; } public void HttpSample (){ //NSUrlRequestの第2引数にキャッシュの設定してる。 var req = new NSUrlRequest (new NSUrl (Application.WisdomUrl), NSUrlRequestCachePolicy.ReloadIgnoringCacheData, 10); //HTTPを叩く処理第2引数のデリゲートに自分自身を渡す(Cocoa : NSUrlConnectionDelegate) NSUrlConnection.FromRequest (req, this); } // HTTPを叩いた時のデータを受け取る関数(Objective-CのdidReceiveDataラップで複数回呼ばれるそう。) public override void ReceivedData (NSUrlConnection connection, NSData data){ byte [] nb = new byte [result.Length + data.Length]; result.CopyTo (nb, 0); Marshal.Copy (data.Bytes, nb, result.Length, (int) data.Length); result = nb; } }
ReceivedDataはどうも、適当な頻度で必要な回数呼ばれるみたい。 最初にReceivedResponseが呼ばれて、ReceivedDataが何度か呼ばれるみたいです。 近いうちにConsole Output(NSLog)して確認しなくっちゃweb利用したアプリ作れないですね。
WebRequestでプロキシ経由のアクセスできれば超簡単なはずなんだけどもね。
参考: * http://stackoverflow.com/questions/11860218/monotouch-objective-c-iphone-5-x-how-to-cache-web-pages-using-nsurlcache * http://d.hatena.ne.jp/Kmusiclife/20110717/1310908394 * http://docs.go-mono.com/?link=T%3aMonoMac.Foundation.NSUrlConnectionDelegate%2fM * http://d.hatena.ne.jp/It_lives_vainly/20090312/1236855251