上記のフォームに入力して送信するコードは次のとおりです。
// フォームを送信する URI 文字列。
文字列 uriString = " http://www.xxx.com/Login.aspx ";
// 送信する文字列データ。
string postString = "userName=user1&password=password1";
//Webクライアントを初期化する
WebClient webClient = new WebClient();
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
//文字列をバイト配列に変換します
byte[] postData = Encoding.ASCII.GetBytes(postString);
//データをアップロードし、ページのバイト配列を返します
byte[] responseData = webClient.UploadData(uriString, "POST", postData);
//返されたバイト配列を文字列に変換します (HTML)
文字列 srcString = Encoding.UTF8.GetString(responseData);
srcString は、フォームの送信後に返されるページの HTML です。どうでしょうか?とても簡単です。
ただし、上記のコードは ASP または JSP によって生成されたフォームを送信できますが、ASP.NET フォームを送信することはできません。 ASP.NET フォームを送信するときに、「__VIEWSTATE」と「__EVENTVALIDATION」に値を割り当てる必要があるためです。 「__VIEWSTATE」と「__EVENTVALIDATION」の値は、送信するページ上で右クリックして「ソースを表示」することで確認できます。次のように:
id="__VIEWSTATE" value="/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0="
id="__EVENTVALIDATION" value="/wEWBAKxhbOEAQKPpuq2CALyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc"
「ソースファイルの表示」で取得した「__VIEWSTATE」と「__EVENTVALIDATION」の値はフォームに直接送信できないため、URLエンコードされた文字列に変換する必要があります。
viewState = System.Web.HttpUtility.UrlEncode(viewState);
eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation);
完全なコードは次のとおりです:
// 送信ボタンのテキスト
文字列submitButton = "ログイン";
// ページの VeiwState (IE でページを開いて右クリックし、[ソース ファイルの表示] をクリックすると取得できます)
文字列 viewState = "/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0=";
// ページの EventValidation (IE でページを開いて右クリックし、[ソース ファイルの表示] をクリックすると取得できます)
文字列eventValidation = "/wEWBAKxhbOEAQKPpuq2CALyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc";
submitButton = System.Web.HttpUtility.UrlEncode(submitButton);
viewState = System.Web.HttpUtility.UrlEncode(viewState);
(
eventValidation);
{
// フォームを送信するための URI 文字列。
文字列 uriString = " http://www.xxx.com/Login.aspx ";
// 送信する文字列データ。形式は次のとおりです: user=uesr1&password=123
string postString = "userName=1&password=1" + "&loginButton=" + submitButton + "&__VIEWSTATE= + viewState + "&__EVENTVALIDATION= + eventsValidation;
//Webクライアントを初期化する
WebClient webClient = new WebClient();
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
//文字列をバイト配列に変換します
byte[] postData = Encoding.ASCII.GetBytes(postString);
//データをアップロードし、ページのバイト配列を返します
byte[] responseData = webClient.UploadData(uriString, "POST", postData);
// 返されたバイト配列を文字列 (HTML) に変換します。
//ASP.NET によって返されるページは通常、簡体字中国語の場合は Unicode を使用する必要があります。
// Encoding.GetEncoding("GB2312").GetString(responseData)
文字列 srcString = Encoding.UTF8.GetString(responseData);
}
catch (WebException を使用)
{
文字列 msg = we.Message;
}
いくつかのメモ:
1) srcStrinig は、フォームの送信後に返されるページの HTML です。正規表現を使用して分析し、必要なデータを取得できます。
2) 「__VIEWSTATE」と「__EVENTVALIDATION」の値は静的ではありません。
3) Web ページの POST データは、Web ページ データ分析ツール HttpWatch、ネットワーク スニファーなどのツールを通じて表示することもできます。
4) 送信されたフォームに確認コードがある場合、それはこの記事の範囲外です。
この記事のURL: http://www.cnblogs.com/anjou/archive/2006/12/25/602943.html