2011-07-15 7 views
1

私はこれをどうやってどうやって動くか混乱しています。私は、C#でコンソールアプリケーションを使って、password protected homepage内のページリンクから値を取得しようとしています。C#を使用して埋め込みフォームページからログインしてデータを取得します

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(""); 
req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)"; 
req.Method = "POST"; 
req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
req.Headers.Add("Accept-Language: en-us,en;q=0.5"); 
req.Headers.Add("Accept-Encoding: gzip,deflate"); 
req.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"); 
req.KeepAlive = true; 
req.Headers.Add("Keep-Alive: 300"); 
req.Referer = "copy from url"; 

req.ContentType = "application/x-www-form-urlencoded"; 

String Username = copy from url; 
String PassWord = copy from url; 

StreamWriter sw = new StreamWriter(req.GetRequestStream()); 
sw.Write(string.Format("&loginname={0}&password={1}&btnSubmit=Log In&institutioncode=H4V9KLUT45AV&version=2", Username, PassWord)); 
sw.Close(); 
HttpWebResponse response = (HttpWebResponse)req.GetResponse(); 

StreamReader reader = new StreamReader(response.GetResponseStream()); 
string tmp = reader.ReadToEnd(); 

をしかし、私は、Webページから取得したデータを検査するとき、それはこのようなものを示しています:私はこれを推測している

'...Your Session has timed out due to inactivity.Please logout and relogin.
return to login page>'

I'm using the following details

は、ここで私がしようとしているコードですASP.NETでいくつかのVIEWSTATEのものが原因です。 私はホームページから抽出するリンクからデータを取得する際に問題が生じるかもしれないと推測しています。リンクはリロードではなくフレームにデータを読み込むようですウェブページ

誰でもどうぞ。

+0

試しにユーザー/パスを提供できますか? – Gabriel

+0

URLにあります:http://padfly.com/questiontest –

答えて

1

フォームデータが正しくありません。それは私の仕事始めに&を除去した後:すでに他の回答で述べたように

sw.Write(string.Format("loginname={0}&password={1}&btnSubmit=Log In&institutioncode=H4V9KLUT45AV&version=2", Username, PassWord)); 

また、あなたがサイトへのさらなる要求に返さASPSESSIONIDSSRRDRSTクッキーを追加する必要があります。

+0

ありがとうございましたコードは機能しましたが、新しいエラーで私を残しました:あなたのブラウザ: "このページはフレームを使用しますが、あなたのブラウザはそれらをサポートしていません"おかげで –

+0

さて、後で問題の解決方法を理解しました。本当にありがとう :) –

0

あなたはあなたの中にログインした後、[OK]を...ウェブサイトは、クッキーを使用して、そうされるが、別のWebRequestクラスを作るために、最初のクッキーを取得する必要があります。

CookieCollection cookiesResponse = new CookieCollection(); 

if (response != null) 
{ 
    foreach (string cookie in response.Headers["Set-Cookie"].Split(';')) 
    { 
     string name = cookie.Split('=')[0]; 
     string value = cookie.Substring(name.Length + 1); 
     cookiesResponse.Add(new Cookie(name.Trim(), value.Trim(), path, domain)); 
    } 
} 

あなたの例ではクッキーが含まれていますASPSESSIONIDSSRRDRST = FEKODBMDBEIPCLLENCFLFBEAをあなたがウェブへの要求のためCookieCollectionことを使用する必要があります

、あなたの要求に、あなたはクッキーを設定することができます。

request.CookieContainer = cookiesResponse; 

そしてfinaly、あなたは応答を解析することができます。 htmlタグ解析を使用するか、プレーンテキストを解析することができます。

私はこれが役に立ちそうです。

+0

あなたのコードを試してみましたが、うまくいきませんでした... –

+0

path = "/"とドメインはURLルートです。 foreach内のブレークポイント、しかし、thats引数はオプションです。 – Gabriel

+0

このコードを自分で試しましたか?私はまだ応答を得ています: '...あなたのセッションは非アクティブなためタイムアウトしました。ログアウトして再ログインしてください。
ログインページに戻る... ' –

関連する問題