httpヘッダに独自の値を指定して Webページやコンテンツを取得する - HttpWebRequest, HttpWebResponse クラスを利用 - C#

HttpWebRequest, HttpWebResponse を利用してWebページやコンテンツを取得するコードを紹介します。

概要

こちらの記事ではWebClientを用いてWebページやコンテンツを取得する方法を紹介ししました。一般的なWebページの取得の用途ではWebClientで十分ですが、ヘッダに独自の値を追加したい場合や、リファラやUserAgentを設定したい場合、Cookieを用いたい場合はWebClientでは対応できないため、HttpWebRequestを用います。この記事ではHttpWebRequest, HttpWebResponseを使用したWebページやコンテンツの取得コードを紹介します。

UI

下図のUIを作成します。

コード

下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.IO;

namespace HttpConnectionDemo
{
  public partial class FormHttpWebConnection : Form
  {
    public FormHttpWebConnection()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.ipentec.com");
      req.Method = "GET";

      HttpWebResponse res = (HttpWebResponse)req.GetResponse();

      for (int i = 0; i < res.Headers.Count; i++) {
        textBox1.Text += res.Headers[i] + "\r\n";
      }
      
      Stream s = res.GetResponseStream();
      StreamReader sr = new StreamReader(s);
      string content = sr.ReadToEnd();

      textBox1.Text +="\r\n\r\n-----------\r\n\r\n\r\n";
      textBox1.Text += content;
    }
  }
}

解説

  HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.ipentec.com");
HttpWebRequestのインスタンスを作成します。インスタンス作成はnewによる作成ではなくWebRequestクラスのCreate()メソッドで作成します。

  req.Method = "GET";
アクセスメソッドを指定します。
  HttpWebResponse res = (HttpWebResponse)req.GetResponse();
HttpWebRequestのGetResponse()メソッドを呼び出し、コンテンツを取得します。サーバーからのレスポンス(コンテンツの取得)はHttpWebReqestクラスで扱います。

  for (int i = 0; i < res.Headers.Count; i++) {
    textBox1.Text += res.Headers[i] + "\r\n";
  }
HttpWebResponseのHeadersプロパティからレスポンスヘッダを取り出しテキストボックスに表示します。

  Stream s = res.GetResponseStream();
  StreamReader sr = new StreamReader(s);
  string content = sr.ReadToEnd();
HttpWebResponseのGetResponseStream()メソッドを呼び出しレスポンスコンテンツを読み出すストリームを取得します。今回はWebページのため、StreamReaderを用いてテキストとして読み出します。

  textBox1.Text +="\r\n\r\n-----------\r\n\r\n\r\n";
  textBox1.Text += content;
StreamReaderから読み出した文字列をTextBoxに表示します。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[Get]ボタンを押すとWebサイトに接続しWebページのコンテンツを取得しレスポンスヘッダと、コンテンツをテキストボックスに表示します。(下図の"---------"の区切り線より上がレスポンスヘッダ、以下がコンテンツとなります。)


コンテンツはStreamReaderで読みだしているため、Encodingなどを指定しなくても文字化けはしていません。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2017-09-04
作成日: 2014-03-10
iPentec all rights reserverd.