C#でウェブサイトのページを取得したい場合には「System.Net.WebClient」クラスを使うと便利です。
ここでは WebClientクラスを使ってWebページをダウンロードする方法を解説します。
Webページをダウンロードしてファイルに保存する
URLを指定して該当ページをファイルに保存するには DownloadFileメソッドを使います。
static void Main()
{
WebClient wc = new WebClient();
wc.DownloadFile("http://www.google.co.jp/", "c:\\test.htm");
}
WebClientクラスのインスタンスを作成して、DownloadFileメソッドを呼び出します。
引数の1番目に取得するサイトのURLを、2番目に保存するファイル名を指定します。
Webページをダウンロードしてbyte配列で取得する
URLを指定して該当ページをbyte配列で取得するには DownloadDataメソッドを使います。
static void Main()
{
WebClient wc = new WebClient();
byte[] data = wc.DownloadData("http://www.google.co.jp/");
}
WebページをStreamクラスで取得する
WebページをSystem.IO.Streamクラスの形で取得したい場合は OpenReadメソッドを使います。
static void Main()
{
WebClient wc = new WebClient();
Stream st = wc.OpenRead("http://www.google.co.jp/");
}
HTTPSのWebページをダウンロードする
取得したいウェブサイトのURLが https://… の場合は注意が必要です。
WebExceptionが発生する
WebClientクラスを使って HTTPS のサイトをダウンロードしようとすると以下のような例外が発生する場合があります。
「SSL/TLS のセキュリティで保護されているチャネルを作成できませんでした」
HTTPとちがってHTTPSでは内容が暗号化されて通信されます。
暗号化のプロトコルは「SSL/TLS」などと呼ばれますがこれにはバージョンがあります。
古いバージョンのプロトコルには脆弱性がある為、古いプロトコルでは接続できないようにしているサイトが多くあります。
アクセスする側のプログラムもサイトにあったプロトコルを利用する必要があります。
セキュリティプロトコルを指定する
ServicePointManagerクラスの「SecurityProtocol」プロパティを使って利用するプロトコルを指定します。プロトコルは複数指定する事が可能です。
static void Main()
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
WebClient wc = new WebClient();
System.IO.Stream st = wc.OpenRead("https://www.yahoo.co.jp/");
}
※.Net Framework 4.7以降では「SecurityProtocolType.SystemDefault」という値が追加され、最適なプロトコルが選択されるようになっているようなので、このような設定は必要ないかもしれません


コメント
コメントを投稿