フォーム認証を使用するWebサイトにブラウザウィンドウ(おそらくIEに固執する可能性があります)を開く必要があるアプリケーションを作成しています。秘訣は、アクセスする必要のあるサイトの数が非常に多いために時間を節約するために、それらをすでに認証する必要があるということです。(最終的には、それらをスクリーンスクレイピングしてデータを処理します...しかし、必要なときにクリックして実際のサイトにアクセスできるように、認証部分を機能させる必要があります。)
HttpWebRequestを使用してhtmlを取得し、それをブラウザーに渡すことができるという点で、FormsAuthenticationの部分が機能しています。ただし、実際のWebサイトに移動できるように、Cookieをクライアントブラウザに転送することはできません。
認証用のSystem.Net.Cookiesを取得しており、それらをSystem.Web.HttpCookiesにコピーして、Responseオブジェクトに追加してみました。ページにリンクを配置するか、Response.Redirectを使用してWebサイトに移動すると、機能しません。ユーザーが認証されていないかのように動作します。
誰かが私がこれをどのようにやってのけるのか考えていますか?
これをより明確にするために、現在のコードは次のとおりです。
Dictionary<string, string> formValues = new Dictionary<string, string>(4);
formValues.Add("txbUserName", "USERNAME");
formValues.Add("txbPassword", "PASSWORD");
formValues.Add("SubmitB", "Log In");
HttpWebRequest webRequest;
StreamReader responseReader;
string responseData;
//This authenticates an HttpWebRequest and returns it
webRequest = FormsAuthHttpWebRequest.Create("REQUESTURI", "LOGINURI",
formValues) as HttpWebRequest;
responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());
responseData = responseReader.ReadToEnd();
responseReader.Close();
foreach (Cookie cookie in webRequest.CookieContainer.GetCookies(new Uri("SITEURI")))
{
HttpCookie httpCookie = new HttpCookie(cookie.Name, cookie.Value)
{
Domain = cookie.Domain,
Expires = cookie.Expires,
Path = cookie.Path,
HttpOnly = cookie.HttpOnly,
Secure = cookie.Secure
};
Response.Cookies.Add(httpCookie);
}
Response.Redirect("REQUESTURI");