重複の可能性:
HttpWebRequest で Cookie を使用する方法
FOPE にログインして、別のスレッドで結果を照会しようとしました ( Microsoft FOPE (Forefront Online Protection for Exchange) 検索の自動化)。
最後に、WPF Webbrowser コントロールを使用してそれを達成しました。悲しいことに、これは非常に厄介な方法であり、マルチスレッドやそのようなものは問題外であるため、明らかに非常に遅くなります。だから今、私はそれを HttpWebRequest / HttpWebResponse または WebClient に変換できるようにしたいと思っています (マルチスレッド部分についてはわかりませんが) セットアップ。
論理フローは次のとおりです。
- 認証する
- サブドメインごとにページを取得する
- ExtractHREF
- 取得する
- 詳細な情報
- 解析の詳細
- 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)
{
}
}