0

誰もがこれが答えられたことに腹を立てる前に。私はこれを行う方法を探してWebを精査し、いくつかの方法を試しました。C#を介してWebサイトにログインし、プログラムでWebサイトにログインして画面を表示する方法を教えてください。これらは両方とも役に立ちましたが、ログインページを通過できない理由がわかりません。これが私のコードです:

string url = "https://www.advocare.com/login.aspx";
string url2 = "https://url.after.login";
HttpWebRequest wReq = WebRequest.Create(url) as HttpWebRequest;
wReq.KeepAlive = true;
wReq.Method = "POST";
wReq.AllowAutoRedirect = false;
wReq.ContentType = "application/x-www-form-urlencoded";
string postData = "ctl00$cphContent$txtUserName=Username&ctl00$cphContent$txtPassword=Password";
byte[] dataBytes = UTF8Encoding.UTF8.GetBytes(postData);
wReq.ContentLength = dataBytes.Length;
using (Stream postStream = wReq.GetRequestStream())
{
   postStream.Write(dataBytes, 0, dataBytes.Length);
}
HttpWebResponse wResp = wReq.GetResponse() as HttpWebResponse;
string pageSource;
wReq = WebRequest.Create(url2) as HttpWebRequest;
wReq.CookieContainer = new CookieContainer();
wReq.CookieContainer.Add(wResp.Cookies);
HttpWebResponse wResp2 = wReq.GetResponse() as HttpWebResponse;
using (StreamReader sr = new StreamReader(wResp2.GetResponseStream()))
{
    pageSource = sr.ReadToEnd();
}

pageSourceを見るたびに、login.aspxページのHTMLになります。私はここで何かが欠けているに違いありません。多分それはクッキーを取っていません、私は知りません。私が別として持っている1つの質問は、なぜこれが機能しないのかということですが、文字列postData=""にあります。それらはhtmlタグの名前またはID部分であると想定されていますか?私は困惑していて、別の方法を見つけなければならないので、これに関するどんな助けも大いに感謝されます。を使用する代わりに、WebRequestを続行したいと思います。できないなら、まあ。助けてくれてありがとう!WebResponseWebBrowser

4

2 に答える 2

0

ログイン以外に何をしようとしていますか?プログラムでサイトをQAするような場合は、セレンを使用し、それに基づいてac#アプリを作成することをお勧めします。必要に応じて、セレンベースのプロジェクトのベースプロジェクトへのリンクを投稿できます。

于 2013-02-25T04:35:51.637 に答える
0

ページのソースを必ずしも表示する必要はありませんが、実際の HTTP POST を確認してください。Fiddlerなどの HTTP プロキシをインストールしてから、エミュレートしようとしているページに再度アクセスします。HTTP POST 要求を完了し、プロキシで生成された結果を確認します。そこから、渡されている実際のパラメーター、Cookie、ヘッダーなどを確認でき、コードでこれを複製することができます。HTML ソースを表示するだけでは何かを見落としがちですが、ネットワーク トラフィックを監視するのは非常に簡単です。

于 2013-02-25T05:06:07.940 に答える