Home > C# > 目的別 > Web関連 > HttpClientクラス

HttpClientクラスを使用して、Webサイトのデータを取得する

新規作成日 2021-04-27
最終更新日

HttpClientクラスを使用して、Webサイトのデータを取得する単純な作業を行うWPFアプリケーションです。

コンソール・アプリケーションで、HttpClientクラスを使用する例は、よく紹介されていますが、WPFアプリケーションでの使用する例は、あまり見かけません。

問題なく動作するサンプル・アプリケーションを見ると、なんてことのないコードですが、意識していないと、マルチスレッド・プログラミングのデッドロックが発生するコードを書いてしまいがちです。

参考

HttpClient詳解、或いはAsyncOAuthのアップデートについて(33ページ)

プログラムの作成

新しいプロジェクトを作成します。

新しいプロジェクトを作成します。

WPFアプリを選択し、次へをクリックします。

WPFアプリを選択し、次へをクリックします。

それぞれのファイルに、以下のコードを入力します。※MainWindow.xamlコードの最初の行は、自動生成されたコードを、そして、MainWindow.xaml.csコードのnamespaceも自動生成されたものを使用してください。

MainWindow.xaml
<Window x:Class="GetHtmlDocument.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Title="GetHtmlDocument" Height="250" Width="350">
    <DockPanel>
        <DockPanel DockPanel.Dock="Top">
            <Button DockPanel.Dock="Right" Click="Button_Click">Browse</Button>
            <TextBox Name="address_bar">http://google.co.jp</TextBox>
        </DockPanel>
        <TextBox Name="htmlDocument">TextBox</TextBox>

    </DockPanel>
</Window>
MainWindow.xaml.cs
using System.Net.Http;
using System.Threading.Tasks;
using System.Windows;

namespace GetHtmlDocument
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            // Browseボタンをクリック
            var value = await GetAsync();
            htmlDocument.Text = value;

        }

        private async Task<string> GetAsync()
        {
            var client = new HttpClient();
            var result = await client.GetStringAsync("http://google.co.jp");
            return result;
        }
    }
}

MainWindow.xaml.cs内の、ボタン・クリック・イベントが、 asyncにしてあることに注意してください(重要)。また、UIのアドレスが入力されているテキストボックスは、コードに反映されていない(未実装)ことにも注意してください。

実行結果

「Browse 」ボタンを押すと、ソースコード(おそらく、ソースコードを表示したものと同じテキスト)が、テキスト・ボックスに表示されます。

プログラム実行後、「Browse 」ボタンを押すと、ソースコード(おそらく、ソースコードを表示したものと同じテキスト)が、テキスト・ボックスに表示されます。

UIのテキストボックスからURIを取得する

少しコードを変更し、UIに設置したテキストボックスからURIを取得し、Webデータを取得するように、コードを変更します。xamlコードは、変更ありません。xaml.csコードの修正です。

MainWindow.xaml.cs
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Windows;

namespace GetHtmlDocument
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        Uri uri ;    // URIを格納する変数

        public MainWindow()
        {
            InitializeComponent();
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            // URIを取得
            uri = new Uri(address_bar.Text);

            if (uri != null)    // uriが指定されていなければ何もしない
            {
                // Browseボタンをクリック
                var value = await GetAsync();
                htmlDocument.Text = value;
            }
        }

        private async Task<string> GetAsync()
        {
            using (var client = new HttpClient())
            {
                var result = await client.GetStringAsync(uri);
                return result;
            }
        }
    }
}
参考
このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」