0

可能重复:
如何在 HttpWebRequest 中使用 cookie

我一直在尝试登录 FOPE 并在另一个线程中查询结果(自动化 Microsoft FOPE(Forefront Online Protection for Exchange)搜索)。

我终于使用 WPF Webbrowser 控件实现了它。可悲的是,这是一种非常混乱的方式,而且由于多线程或任何类似的事情都是不可能的,因此速度肯定非常慢。所以现在我希望能够将其转换为 HttpWebRequest / HttpWebResponse 或 WebClient (尽管我不确定它的多线程部分)设置。

逻辑流程如下:

  1. 认证
  2. 检索每个子域的页面
  3. 提取HREF
  4. 取回
  5. 详细资料
  6. 解析详细信息
  7. 返回 CSV

粗体验证是我唯一苦苦挣扎的部分。我的 WebFu 很弱,所以试图破译我在 FireBug 中看到的东西充其量是可笑的。它似乎确实使用了 FedAuth cookie,但这与我能够破译的一样多。

所以基本上,如果我想在网络浏览器中获得第 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