2012-11-15 19 views
6

まず、この件について私の気に入った言い訳をしてください。私はDOSの前に始まった引退したプログラマーです。私はASP.NETの専門家ではありません。私が知る必要があることの一部は、私が知る必要があるものです。 (もし私に従ってください...)コンソールアプリケーションからASP.NET Webサイトにログインする

私はウェブサイトにログインしていくつかのコンテンツをスクラップします。メモ帳とフィドラー2でHTMLソースを見た後、サイトがASP.NETテクノロジで実装されていることは間違いありません。

私は、たくさんのgoogle'ingをやって、C#でスクリーンスクレーパーを書くことについて私が見つけたすべてを読んで始めました。いくつかの調査と多くの試みの後、私はそれが簡単ではないという結論に達したと思う。

問題の要点は(私が今見ているように)ASPはプログラマが状態を維持するための多くの方法を提供していることです。 Cookie、ビューステート、セッション変数、ページ変数、ポストパラメータの取得などがあります。プログラマは、サーバーとクライアントのスクリプトの間で作業を分けることができます。 IEやSafari、Chrome、FirefoxなどのリッチなWebクライアントは、プログラマが何を書き込んでも(そしてASPフレームワークがカバーしているものを)処理する方法を知っています。

WebClientはリッチWebクライアントではありません。クッキーの実装方法も知られていません。

私は難局です。 1つの方法は、ASPアプリケーションが期待しているリッチクライアントのすべての機能をリバースエンジニアリングし、ログインしたリッチクライアントを模倣するステロイドクラスのWebClientを作成することです。

私のアプリにIE(またはその他のリッチクライアント)を埋め込み、公開されたインターフェイスが充分に豊富で、ユーザー名とパスワードフィールドをプログラムで入力してフォームをPOSTできるようになることを願っています。 (応答ストリームにアクセスして、後でデータを取り出すためにHTMLを解析することができます...)

または、私はWebClientよりもっと豊富なサードパーティのコントロールを探すことができます。

誰も私の注意を集中しなければならないことについて、鋭い洞察力を発することはできますか?

これは、プロジェクトと同じ程度の学習経験です。つまり、ターゲットサイトからのログインと情報の取得を自動化したいのです。

ここ
+0

WebClientでCookieを利用する方法については、http://stackoverflow.com/questions/1777221/using-cookiecontainer-with-webclient-classを参照してください。 – abatishchev

+0

あなたがしていることは[ウェブクロール]と呼ばれています(http://stackoverflow.com/questions/tagged/web-crawler) – abatishchev

答えて

3

私は、ウェブサイトにログインして

string loginSite(string url, string username, string password) 
     { 
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
      string cookie = ""; 

      //this values will change depending on the website 
      string values = "vb_login_username=" + username + "&vb_login_password=" + password 
           + "&securitytoken=guest&" 
           + "cookieuser=checked&" 
           + "do=login"; 
      req.Method = "POST"; 
      req.ContentType = "application/x-www-form-urlencoded"; 
      req.ContentLength = values.Length; 
      CookieContainer a = new CookieContainer(); 
      req.CookieContainer = a; 
      System.Net.ServicePointManager.Expect100Continue = false; // prevents 417 error 
      using (StreamWriter writer = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII)) { writer.Write(values); } 
      HttpWebResponse c = (HttpWebResponse)req.GetResponse(); 
      Stream ResponseStream = c.GetResponseStream(); 
      StreamReader LeerResult = new StreamReader(ResponseStream); 
      string Source = LeerResult.ReadToEnd(); 


      foreach (Cookie cook in c.Cookies) { cookie = cookie + cook.ToString() + ";"; } 
      return cookie; 
     } 

そして、ここでのコールの例を私のクッキーを取得するために使用例機能:あなたが知っている、拡張HTTP-ヘッダーを使用することができますFirefoxで

string Cookie = loginSite("http://theurl.comlogin.php?s=c29cea718f052eae2c6ed105df2b7172&do=login", "user", "passwd"); 

      HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.theurl.com"); 
      //once you got the cookie you add it to the header. 

      req.Headers.Add("cookie", Cookie); 
      HttpWebResponse response = (HttpWebResponse)req.GetResponse(); 
      using (Stream respStream = response.GetResponseStream()) 
      { 
       using (StreamReader sr = new StreamReader(respStream)) 
       { 
        string s = sr.ReadToEnd(); 
        HtmlReturn = s; 
        // System.Diagnostics.Debugger.Break(); 
       } 
      } 

をどのパラメータが郵便で設定されていて、変数値を変更したか:

string values = "vb_login_username=" + username + "&vb_login_password=" + password 
           + "&securitytoken=guest&" 
           + "cookieuser=checked&" 
           + "do=login"; 

To matc hを入力します。

あなたがFirefox用-HTTP-ヘッダがライブすることを決定した場合、あなたがウェブサイトにログインするときに、ヘッダーから ポスト情報を取得しますが、そのようなこと:

GET/HTTP/1.1ホスト:WWW Mozilla/5.0 (Windows NT 6.1; rv:15.0)Gecko/20100101 Firefox/15.0.1 Accept: text/html、application/xhtml + xml、application/xml; q = 0。9、/; q = 0.8 受け入れ言語:es-es、q; 0.8、en-us; q = 0.5、en; q = 0.3アクセプトエンコーディング: gzip、deflate接続:キープアライブCookie: WT_FPC = id = 82.144.112.152-154450144.30258861:lv = 1351580394112:ss = 1351575867559; WT_NVR_RU = 0 = msdn:1 =:2 =; omn​​iID = 0d2276c2_bbdd_4386_a11d_f8da1dbc5489; MUID = 349E06C547426937362B02CC434269B9; MC1 = GUID = 47b2ed8aeea0de4797d3a40cf549dcbb &ハッシュ= 8aed & LV = 201210 & V = 4 & LU = 1351608258765; A = I & I = AxUFAAAAAABWAAukh4HjpMmS4eKtKpWV0ljg !! & V = 4; msdn = L = ja-US

1

あなたのためにこれを行うことができるChrome拡張機能を構築することができると思われます。

ところで、あなたは「セキュリティ専門家」ではないのですか?

0

なぜIEを使用しないのですか?WindowsフォームでIEを自動化するのは非常に簡単で、プロキシも簡単に処理できます。

関連する問題