私はこの1つのソロに長すぎるために頭を抱えています。私はこのサイトや他の多くのサイトに何時間も費やしてもそれを解読することができませんでした。WebRequest/Responseを使用してログインセッションが新しいWebページに転送されませんか?
基本的に、WebRequest/Responseを使用してLogInページの後ろのWebページからデータを取り除こうとしています。 (これは、WebBrowserコントロールを使用して、別のWebページに移動するいくつかの階層化されたイベントで動作するようになっていますが、リファクタリングを試みるときにいくつかの問題を引き起こしています。悪い習慣」)
これは私が持っているものです。
string formParams = string.Format("j_username={0}&j_password={1}", userName, userPass);
string cookieHeader;
WebRequest request = WebRequest.Create(_signInPage);
request.ContentType = "text/plain";
request.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(formParams);
request.ContentLength = bytes.Length;
using (Stream os = request.GetRequestStream())
{
os.Write(bytes, 0, bytes.Length);
}
WebResponse response = request.GetResponse();
cookieHeader = response.Headers["Set-Cookie"];
WebRequest getRequest = WebRequest.Create(sessionHistoryPage);
getRequest.Method = "GET";
getRequest.Headers.Add("Cookie", cookieHeader);
WebResponse getResponse = getRequest.GetResponse();
try
{
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
textBox1.AppendText(sr.ReadToEnd());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
これまでのところ、私は最初のリンクから適切なページを取得することができるが、私が第二に行くとき、それが送信します私がログインしていないかのように私をログインページに戻します。
この問題は、私は初心者ですので多分私は間違っているだけです。それはPOSTから返されたクッキーをキャプチャします:JSESSIONIDとS2Vしかし、私たちがFireFox WebConsoleを使って "GET"に行くと、ブラウザーはJSESSIONID、S2V とを送信したことを示します、SPRING_SECURITY_REMEMBER_ME_COOKIEログインフォームの[Remember Me]ボックスをクリックしたときに表示されます。
私はSOのリソースを使用してこれを行うさまざまな方法を試しましたが、私は必要なページにまだ到達していません。だから、私が残した髪の毛のために、私は良いオレの助けを求めることにしました。 (これは、あまりにも頑固なものではありません)。
私がログインしようとしているサイトの実際のアドレスが必要な場合は、非公開のメッセージでカップルの人々に送信することを喜んでより。私はウォルマートによって提案答えを反映する必要が
コード:
var request = (HttpWebRequest)WebRequest.Create(sessionHistoryPage);
request.Credentials = new NetworkCredential(userName, userPass);
request.CookieContainer = new CookieContainer();
request.PreAuthenticate = true;
WebResponse getResponse = request.GetResponse();
try
{
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
textBox1.AppendText(sr.ReadToEnd());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
この提案、私は動作しませんでした、それを実装し、少なくとも方法。
CookieContainerを使用して1つのリクエストから別のリクエストにクッキーを転送するようにコードを変更しましたが、レスポンスでは私がログインしなかったかのように元のログインページが返されます。
この種の動作を許可しないサイトはありますか?
最終解決は
彼は私がにログインしようとしているウェブサイトは、有効なセッションなしで認証を持つことができない可能性があることを述べたところ、最終的な解決策は、エイドリアンIftodeによって提案されたので、GETを追加プロセスの始めまで、私はそのクッキーを入手することができました。
皆さん、ありがとうございます!
実用的なアドバイスは、Fiddler http://fiddler2.comを取得し、ログイン後に正確にどのヘッダがあなたのブラウザによって送受信されているかを確認します。そしてそれらをあなたのC#コードでエミュレートします。 –
@zespri私は以前にFiddlerを使ってきましたが、正に言えば、私の現在のプログラミング能力レベルでは、それは私の頭の中です。それは私が取り組んでいることですが、それほど役に立たず、私はFireFoxウェブコンソールから同じ情報を得ました。 – Josh