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

| | コメント(0)
//もしかすると名前空間足りないかも
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でクエリつけたらログに残っちゃいますしね。

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

カテゴリ

コメントする

このブログ記事について

このページは、ハセテツが2007年6月 8日 17:57に書いたブログ記事です。

ひとつ前のブログ記事は「サーバサイドで処理を実行する方法」です。

次のブログ記事は「Amazonさん、これはないんじゃないですか?」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。