HttpWebRequestでCookieを利用して、Webページやコンテンツを取得する - C#

HttpWebRequestでCookieを用いるコードを紹介します。

概要

こちらの記事では、HttpWebRequestを用いてWebページやコンテンツを取得するコードを紹介しました。この記事ではさらにCookieを用いてWebページやコンテンツにアクセスするためのコードを紹介します。Cookieを利用してWebページやコンテンツへのアクセスをする場合もHttpWebRequest, HttpWebResponseを用います。
Cookieの書き込みや読み取りをするサーバー側のプログラムはこちらの記事で紹介しているものを使います。

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 FormHttpWebConnectionCookie : Form
  {
    private CookieContainer cc;

    public FormHttpWebConnectionCookie()
    {
      InitializeComponent();
    }

    private void FormHttpWebConnectionCookie_Load(object sender, EventArgs e)
    {
      cc = new CookieContainer();
    }

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

      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;

    }

    private void button2_Click(object sender, EventArgs e)
    {
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.ipentec.com/webapp/CookieDemo/CookieWrite.aspx");
      req.Method = "GET";
      req.CookieContainer = cc;

      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;
    }

    private void button3_Click(object sender, EventArgs e)
    {
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.ipentec.com/webapp/CookieDemo/CookieClear.aspx");
      req.Method = "GET";
      req.CookieContainer = cc;

      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;
    }
  }
}

実行結果

プロジェクトを実行します。下図のフォームが表示されます。


[Get CookieView]ボタンをクリックします。HTMLファイルが取得できます。まだ、Cookieに値が設定されていないため、name, valueの欄には値が記載されていません。


[Get CookieWrite]ボタンをクリックします。サーバー側でCookieの書き込み処理が実行されCookieに値が書きこまれます。レスポンスとしてCookieにメッセージが書きこまれた旨のHTMLが返ります。


再度[Get CookieView]ボタンをクリックします。HTMLファイルが取得できます。Cookieに値が設定されたため、name, valueの欄に値が表示されます。


[Get CookieClear]ボタンをクリックします。Cookieの値がクリアされます。Cookieがクリアされた旨のHTMLがレスポンスで戻ります。


[Get CookieView]ボタンをクリックします。name, valueの値に何も表示されないことが確認できます。

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