HttpWebRequestでCookieを利用して、Webページやコンテンツを取得する
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を愛用