C#で作るWindowsアプリ
−HTTP GETする−


[トップ] [目次] [←前] [次→]

HTTP GETする

せっかくなので、前回のサンプルにWebサーバからファイルをHTTP GETで読み込む機能を追加してみましょう。
今回もコードから


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114

namespace Sample5 {
    using System;
    using System.IO;
    using System.Net;
    using System.Drawing;
    using System.Windows.Forms;
    
    public class MyForm : Form {
        private TextBox mTextBox;               // テキストボックス
        private string mDefaultDirectory;      // カレントディレクトリ
        
        // Main
        public static void Main(string[] args) {
            MyForm frm = new MyForm();
            Application.Run(frm);
        }
        
        // コンストラクタ
        public MyForm() {
            // メインメニューを生成
            MainMenu mm = new MainMenu();
            
            // ファイルメニューを生成
            MenuItem mi = mm.MenuItems.Add("ファイル(&F)");
            mi.MenuItems.Add(new MenuItem("開く(&O)...", new EventHandler(this.FileOpen_Clicked)));
            mi.MenuItems.Add("-");
            mi.MenuItems.Add(new MenuItem("終了(&X)", new EventHandler(this.FileExit_Clicked), Shortcut.CtrlQ));
            
            // ヘルプメニューを生成
            mi = mm.MenuItems.Add("ヘルプ(&H)");
            mi.MenuItems.Add(new MenuItem("バージョン情報(&A)...", new EventHandler(this.HelpAbout_Clicked)));
            
            // フォームのメニューとしてセット
            this.Menu = mm;
            
            // 開くボタンを生成
            Button btn = new Button();
            btn.Text = "開く...";
            btn.Location = new Point(2, 2);    // 座標を設定
            btn.Size = new Size(100, 22);      // サイズを設定
            btn.TabIndex = 0;                  // タブ順は最初
            btn.Anchor = AnchorStyles.Top | AnchorStyles.Left;  // 左上を固定
            btn.Click += new EventHandler(this.FileOpen_Clicked);
            this.Controls.Add(btn);
            
            // URLを開くボタンを生成
            btn = new Button();
            btn.Text = "URLを開く...";
            btn.Location = new Point(104, 2);  // 座標を設定
            btn.Size = new Size(100, 22);      // サイズを設定
            btn.TabIndex = 1;                  // タブ順は最初
            btn.Anchor = AnchorStyles.Top | AnchorStyles.Left;  // 左上を固定
            btn.Click += new EventHandler(this.UrlOpen_Clicked);
            this.Controls.Add(btn);
            
            // テキストボックスを生成
            mTextBox = new TextBox();
            mTextBox.Text = "";
            mTextBox.Location = new Point(0, 26);   // 座標を設定
            mTextBox.Size = new Size(this.ClientSize.Width, this.ClientSize.Height - 26);
                                                     // サイズを設定
            mTextBox.Multiline = true;              // 複数行OKにする
            mTextBox.ScrollBars = ScrollBars.Both;  // スクロールバーを表示
            mTextBox.BackColor = Color.White;       // 背景色を白にする
            mTextBox.TabIndex = 2;                  // タブ順は2番目
            mTextBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
                                                     // 上下左右とも固定
            Controls.Add(mTextBox);
        }
        
        // ファイル−開くメニューのイベントハンドラ
        private void FileOpen_Clicked(object sender, EventArgs e) {
            OpenFileDialog opendlg = new OpenFileDialog();
            opendlg.Filter = "テキストファイル (*.txt)|*.txt|すべてのファイル (*.*)|*.*" ;
            opendlg.InitialDirectory = mDefaultDirectory;
            if (opendlg.ShowDialog() == DialogResult.OK) {
                // ディレクトリを保存しておく
                FileInfo fi = new FileInfo(opendlg.FileName);
                mDefaultDirectory = fi.DirectoryName;
                
                // ファイルを読み込む
                Stream stm = opendlg.OpenFile();
                if (stm != null) {
                    StreamReader reader = new StreamReader(stm, System.Text.Encoding.GetEncoding("Shift_JIS"));
                    mTextBox.Text = reader.ReadToEnd();
                    stm.Close();
                }
            }
        }
        
        // ファイル−終了メニューのイベントハンドラ
        private void FileExit_Clicked(object sender, EventArgs e) {
            this.Close();
        }
        
        // ヘルプ−バージョン情報メニューのイベントハンドラ
        private void HelpAbout_Clicked(object sender, EventArgs e) {
            MessageBox.Show("Sample3aプログラム Ver 0.1");
        }
        
        // URLを開くボタンのイベントハンドラ
        private void UrlOpen_Clicked(object sender, EventArgs e) {
            WebRequest req = WebRequest.Create("http://www.msn.co.jp/home.htm");
            WebResponse rsp = req.GetResponse();
            Stream stm = rsp.GetResponseStream();
            if (stm != null) {
                StreamReader reader = new StreamReader(stm, System.Text.Encoding.GetEncoding("Shift_JIS"));
                mTextBox.Text = reader.ReadToEnd();
                stm.Close();
            }
            rsp.Close();
        }
    }
}
Sample5.cs

コンパイル

csc /t:winexe /r:System.DLL /r:System.Windows.Forms.DLL /r:System.Drawing.DLL Sample5.cs

これでコンパイルできるはずです。
ファイル名が違うだけで前回と変わってません。

URLを開くボタンを追加

開くボタンと同じ要領でURLを開くボタンを追加しただけです(46行目から)。

HTTP GETする

System.Net.WebRequestクラスなんてのがあります。
これを使えばHTTP GETなんて簡単です。 もう、見てのとおりなんですが、

  1. WebRequest.CreateでWebRequestを作る
  2. レスポンスをもらう
  3. レスポンスからStreamをもらう
  4. あとはファイルとまったく同じで、StreamからStreamReaderを作って、Shift_JIS→Unicode変換をしながら読み込んで、テキストボックスに放り込むだけ

てな感じです。

もちろん、実用にするには

くらいは必要ですが、基本的なところはこれだけです。どうです、簡単でしょう?


[トップ] [目次] [←前] [次→]

株式会社ディーバ 青柳 臣一
2002/03/05