0

重複の可能性:
HttpWebRequest で Cookie を使用する方法

FOPE にログインして、別のスレッドで結果を照会しようとしました ( Microsoft FOPE (Forefront Online Protection for Exchange) 検索の自動化)。

最後に、WPF Webbrowser コントロールを使用してそれを達成しました。悲しいことに、これは非常に厄介な方法であり、マルチスレッドやそのようなものは問題外であるため、明らかに非常に遅くなります。だから今、私はそれを HttpWebRequest / HttpWebResponse または WebClient に変換できるようにしたいと思っています (マルチスレッド部分についてはわかりませんが) セットアップ。

論理フローは次のとおりです。

  1. 認証する
  2. サブドメインごとにページを取得する
  3. ExtractHREF
  4. 取得する
  5. 詳細な情報
  6. 解析の詳細
  7. CSVを返す

太字の認証は、私が苦労している唯一のセクションです。私の WebFu は弱いので、FireBug で見ているものを解読しようとするのは、せいぜいばかげています。FedAuth Cookie を使用しているように見えますが、解読できたのはそれだけです。

したがって、基本的に、Web ブラウザーでステップ 2 を取得したい場合は、このリンクに移動します。ログインするためにここにリダイレクトされます。

Web ブラウザーで認証した後、ステップ 2 のページが読み込まれ、続行できます。Webブラウザ(または同様のもの)を使用せずにログインする方法を教えてください。ここで HttpWebRequest を使用してさまざまな例を試しましたが、成功したものはありません。

更新 #1

誰かが私にいくつかのサンプルコードを投稿するように要求したので、私は持っています。これは私が試した唯一のサンプルではありませんが、可能性があるようです.

        string email = "username";
        string password = "password";

        HttpWebRequest request;
        HttpWebResponse response;
        CookieContainer cookies;

        string url = string.Format("https://sts.messaging.microsoft.com/login.aspx?ReturnUrl=%2fDefault.aspx%3fwa%3dwsignin1.0%26wtrealm%3dhttps%253a%252f%252fadmin.messaging.microsoft.com%26wctx%3drm%253d0%2526id%253dpassive%2526ru%253d%25252f%26wct%3d2012-11-30T20%253a22%253a41Z&wa=wsignin1.0&wtrealm=https%3a%2f%2fadmin.messaging.microsoft.com&wctx=rm%3d0%26id%3dpassive%26ru%3d%252f&wct=2012-11-30T20%3a22%3a41Z&email={0}&Password={1}", email, password);
        request = (HttpWebRequest)WebRequest.Create(url);
        request.AllowAutoRedirect = true;
        request.CookieContainer = new CookieContainer();
        response = (HttpWebResponse)request.GetResponse();
        //if (response.StatusCode != HttpStatusCode.Found)
        //{
        //    MessageBox.Show("Something Wrong");
        //    response.Close();
        //    request.KeepAlive = false;
        //    return;
        //}
        cookies = request.CookieContainer;
        response.Close();
        request = (HttpWebRequest)WebRequest.Create("https://admin.messaging.microsoft.com/TraceMessage.mvc/Details/123456?rid=1234567890&d=destDomain.com&p=username&a=-5");
        request.AllowAutoRedirect = true;
        request.CookieContainer = cookies;
        response = (HttpWebResponse)request.GetResponse();

        using (Stream s = response.GetResponseStream())
        {
            StreamReader sr = new StreamReader(s);
            string line;
            while (!sr.EndOfStream)
            {

            }
        }
4

0 に答える 0