0

Drupal で作成された Web サイトからコンテンツを取得したいと考えています。ここでの課題は、スクレイピングしたいページにアクセスする前に、このサイトにログインする必要があることです。セキュリティで保護されたコンテンツを取得できるように、C# コードでこのログイン プロセスを自動化する方法はありますか?

4

2 に答える 2

0

保護されたコンテンツにアクセスするには、ログイン情報を送信するリクエストから始めて、サーバーから提供されたセッションCookieを保存することで、サーバーへのリクエストごとにCookieを保存して送信する必要があります(これは、あなたが言う人です)。

を使用するSystem.Windows.Forms.WebBrowserと、制御が弱くなりますが、Cookieを処理するすぐに使用できるソリューションになります。

私が好む方法は、を使用System.Net.HttpWebRequestしてすべてのWebデータを送受信し、HtmlAgilityPackを使用して、返されたデータを解析して、簡単に読み取れるドキュメントオブジェクトモデル(DOM)にすることです。

仕事に取り掛かる秘訣は、ログイン情報(およびサーバーが追跡することを期待するその他のもの)を追跡System.Net.HttpWebRequestする長寿命のものを作成する必要があることです。System.Net.CookieContainer良いニュースはHttpWebRequest、コンテナを提供すれば、がこれらすべてを処理してくれることです。

HttpWebRequest呼び出すたびに新しいものが必要になるため、.CookieContainer毎回同じオブジェクトに設定する必要があります。次に例を示します。

未テスト

using System.Net;

public void TestConnect()
{
    CookieContainer cookieJar = new CookieContainer();

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.mysite.com/login.htm");
    request.CookieContainer = cookieJar;
    HttpWebResponse response = (HttpWebResponse) request.GetResponse();

    // do page parsing and request setting here
    request = (HttpWebRequest)WebRequest.Create("http://www.mysite.com/submit_login.htm");
    // add specific page parameters here
    request.CookeContainer = cookieJar;
    response = (HttpWebResponse) request.GetResponse();

    request = (HttpWebRequest)WebRequest.Create("http://www.mysite.com/secured_page.htm");
    request.CookeContainer = cookieJar;
    // this will now work since you have saved your authentication cookies in 'cookieJar'
    response = (HttpWebResponse) request.GetResponse();
}

http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.aspx

HttpWebRequestクラス

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.cookiecontainer.aspx

于 2012-09-26T06:52:16.593 に答える
0

これを行うには、 Servicesモジュールを使用する必要があります。ちょっとした説明については、このリンクもチェックしてください。

于 2012-09-25T11:07:24.170 に答える