Web サイトにログインして特定のデータを取得するプログラムに取り組んでいます。ただし、「ログアウトしたか、セッションの有効期限が切れました」というページが表示されるたびに、ログインパラメーターの投稿と Cookie の処理に問題があります。明らかに、パラメーターの投稿またはCookieの処理に問題がありますが、どちらがわかりません。私はしばらくこれに取り組んできましたが、なぜこれが正しく機能しないのか理解できません。
void Login2(string username, string password)
{
string pageSource;
string formUrl = "https://forUrl.com";
string formParams = string.Format("login={0}&sslProt={1}&pwd={2}&gru={3}", username, "", password, "115237091");
string cookieHeader;
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(formUrl);
req.AllowAutoRedirect = false;
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(formParams);
req.ContentLength = bytes.Length;
using (Stream os = req.GetRequestStream())
{
os.Write(bytes, 0, bytes.Length);
}
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
cookieHeader = resp.Headers["Set-cookie"];
string getUrl = "https://Urlbehindform.com";
HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(getUrl);
getRequest.Method = "GET";
getRequest.AllowAutoRedirect = false;
getRequest.Headers.Add("Cookie", cookieHeader);
HttpWebResponse getResponse = (HttpWebResponse)getRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
Response.Redirect(getUrl);
}
POST を実行したときに Cookie を取得し、GET を実行したときにそれを送り返していますが、何らかの理由でこれが機能していないようです。最初はパラメータだと思っていましたが、Firefox で Tamper Data を使用してさらに問題を調べたところ、ログイン パラメータは正常に機能しているようです。私はこれにしばらく取り組んでいて、頭を包むことができないので、どんな助けも素晴らしいでしょう. ありがとう!
更新:
いくつかの提案を試した後、私はまだこれを機能させることができません。ただし、Data Tamper を詳しく調べると、ログイン パラメータを含む POST があり、次に別のページへの GET があり、最後にログイン ページの後のページへの GET があるようです (取得しようとしているページ) . さらにデバッグを行った後、応答ヘッダーの場所に「/cv/scripts/A028/eng/logErr.asp」が表示されているため、ログイン POST が思ったように機能していないことが実際にわかりました。つまり、コードの残りの部分はずっと問題なく機能していた可能性があり、POST が有効なログインを提供していなかったということです。ログインエラーページが常に表示される理由について何か提案はありますか? いつも助けてくれてありがとう。
更新:
改ざんデータをさらにいじった後、ログインに成功できない理由は、パラメーターの POST を成功させるためには、Cookie が既に取得されている必要があるためです。どうすればこれを行うことができますか?