酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows PhoneでHttpWebRequestクラスまたはWebClientクラスを使ってBasic認証をおこなう

BASIC認証の掛かったウェブサイトにアクセスします。レスポンスを扱うのにRxを使っていますので、Microsoft.Phone.ReactiveとSystem.Observableを参照しておく必要があります。

HttpWebRequestクラスを使ってBASIC認証する

まずはHttpWebRequestクラスを使ってBasic認証を行います。CreateHttpメソッドでインスタンスを生成します。Credentialsプロパティに認証情報を設定し、BeginXXX/EndXXXでリクエストレスポンスを取得するので、Observable.FromAsyncPatternメソッドで包んでいます。

// using Microsoft.Phone.Reactive;

// HttpWebRequestクラスを使ったBASIC認証
private void btnBasic_Click(object sender, RoutedEventArgs e)
{
    var req = HttpWebRequest.CreateHttp("http://www.maido3.com/server/script/htaccess/");
    req.Credentials = new NetworkCredential("big-server", "test");

    Observable.FromAsyncPattern<WebResponse>(req.BeginGetResponse, req.EndGetResponse)()
     .Select(res => new System.IO.StreamReader(res.GetResponseStream()).ReadToEnd())
     .ObserveOnDispatcher()
     .Subscribe(msg => MessageBox.Show(msg)
        , ex => MessageBox.Show(ex.Message));
}

WebClientクラスを使ってBASIC認証する

WebClientクラスを使ってBASIC認証の掛かったウェブサイトにアクセスします。レスポンスを扱うのにReactive Extensionsを使っています。

WebClientクラスを使ってBasic認証を行います。Basic認証用IDとパスワードでNetworkCredentialクラスの認証オブジェクトを生成して、WebClientクラスの`Credentialsプロパティ`に設定をします。

あとは、DownloadStringAsyncメソッドを実行してダウンロードをおこなうだけです。

// using Microsoft.Phone.Reactive;

// WebClientクラスを使ったBASIC認証
private void btnBasic_Click(object sender, RoutedEventArgs e)
{
    var wc = new WebClient();
    wc.Credentials = new NetworkCredential("big-server", "test");

    Observable.FromEvent<DownloadStringCompletedEventArgs>(wc, "DownloadStringCompleted")
        .Select(result => result.EventArgs.Result)
        .ObserveOnDispatcher()
        .Subscribe(msg => MessageBox.Show(msg)
        , ex => MessageBox.Show(ex.Message));

    wc.DownloadStringAsync(new Uri("http://www.maido3.com/server/script/htaccess/"));
}