C#でベーシック認証が必要なページのデータを取得する方法

2007-06-08
このエントリーをはてなブックマークに追加

//もしかすると名前空間足りないかも

using System.Text;
using System.IO;
using System.Net;
using System.Web;
using System.Collections;

//相手のCGIはeuc-jpで書かれています。
Encoding encEuc = Encoding.GetEncoding(“euc-jp”);

//POSTするデータの作成、URLエンコードが必要です。
byte[] data = Encoding.ASCII.GetBytes(“data=” + HttpUtility.UrlEncode(“C#からベーシック認証の向こうにPOSTしてみました。”, encEuc));

//WebRequestの作成
HttpWebRequest webreq = (HttpWebRequest)WebRequest.Create(CGIのURL);

//POSTでURLエンコードされたデータを送信しますという宣言
webreq.Method = “POST”;
webreq.ContentType = “application/x-www-form-urlencoded”;

//ベーシック認証使うよ宣言と、次にアカウントとパスワード
webreq.PreAuthenticate = true;
NetworkCredential network = new NetworkCredential(アカウント,パスワード);
webreq.Credentials = network;

//何バイト送るよ
webreq.ContentLength = data.Length;

//送信ストリーム
Stream webreq_stream = webreq.GetRequestStream();
webreq_stream.Write(data, 0, data.Length);
webreq_stream.Close();

//受信ストリーム
WebResponse webres = webreq.GetResponse();
Stream webres_stream = webres.GetResponseStream();

//受信ストリームの読み込みと、クローズ
StreamReader stream = new StreamReader(webres_stream, encEuc);
string strGetData = stream.ReadToEnd();
stream.Close();
webreq_stream.Close();

//受信したら書き出そう
System.Console.Write(strGetData);

Webサービス使えない状況だとやっぱりCGI経由になるわけですが、大事なデータはやっぱりベーシック認証なんかで守られてるわけですよ。しかもGETでクエリつけたらログに残っちゃいますしね。

というわけで、上記の手法を探っておりました。

Tags: