Хорошо, я пытался задать этот вопрос вчера, но я не уверен, что дал достаточно информации, я получил ответ, но он не сработал для меня.В основном то, что я делаю, - это то, что пользователь открывает это приложение Windows Form и входит в систему. После этого они вводят некоторый текст в текстовое поле и нажимают кнопку «Выполнить».На этом этапе функция запуска делает веб-запрос к серверу, который требует входа в систему (вход в систему, который первоначально выполняется после того, как они открывают программу. По какой-то причине он все еще не видит, что пользователь вошел в систему при выполнении второго запроса, даже еслиcookie добавляются также в контейнер cookie. Я не уверен, что делаю неправильно, но я опубликую свой код, чтобы вы могли мне помочь.
Эта функция выполняется для входа в систему, когдапользователь входит в приложение.
private void button1_Click(object sender, EventArgs e)
{
string paramaters = "authmethod=on&chkRememberMe=on&login-form-type=pwd&password=" + pw.Text + "&userid=" + uid.Text + "&username=" + uid.Text;
string strResponse;
HttpWebRequest requestLogin = (HttpWebRequest)WebRequest.Create("https://www.url.com/login.form");
requestLogin.Method = "POST";
requestLogin.CookieContainer = cookieJar;
requestLogin.ContentType = "application/x-www-form-urlencoded";
requestLogin.ContentLength = paramaters.Length;
StreamWriter stOut = new StreamWriter(requestLogin.GetRequestStream(), System.Text.Encoding.ASCII);
stOut.Write(paramaters);
stOut.Close();
HttpWebResponse responseLogin = (HttpWebResponse)requestLogin.GetResponse();
StreamReader stIn = new StreamReader(responseLogin.GetResponseStream());
strResponse = stIn.ReadToEnd();
stIn.Close();
//Add cookies to CookieJar (Cookie Container)
foreach (Cookie cookie in responseLogin.Cookies)
{
cookieJar.Add(new Cookie(cookie.Name.Trim(), cookie.Value.Trim(), cookie.Path, cookie.Domain));
richTextBox2.Text += cookie.Name.ToString() + Environment.NewLine + cookie.Value.ToString() + Environment.NewLine + cookie.Path.ToString() + Environment.NewLine + cookie.Domain.ToString();
}
if (strResponse.Contains("Log On Successful") || strResponse.Contains("already has a webseal session"))
{
foreach (Control cont in this.Controls)
{
cont.Visible = true;
}
loginPanel.SendToBack();
loginPanel.Visible = false;
}
else
{
MessageBox.Show("Login failed.");
}
}
Эта функция запускается, когда пользователь нажимает кнопку «Выполнить» для запуска тестов на учетной записи потребителя.
private string runTestRequest(Uri url, string parameters)
{
string testResults = string.Empty;
HttpWebRequest runTest = (HttpWebRequest)WebRequest.Create(url);
runTest.CookieContainer = cookieJar;
runTest.Method = "POST";
runTest.ContentType = "application/x-www-form-urlencoded";
StreamWriter stOut = new StreamWriter(runTest.GetRequestStream(), System.Text.Encoding.ASCII);
stOut.Write(parameters);
stOut.Close();
StreamReader stIn = new StreamReader(runTest.GetResponse().GetResponseStream());
testResults = stIn.ReadToEnd();
stIn.Close();
return testResults;
}
Иконечно это мой контейнерный объект cookie
public CookieContainer cookieJar = new CookieContainer();
PS: домены веб-запросов различны. Сначала abc.com, 2-ой из 123.com. Единственная проблема заключается в том, что первый домен (который является логином) является глобальным входом в систему для внутренних веб-приложений, таких как 123.com, так как бы мне использовать сеанс входа из 1-го домена с 2nдомен d?
Не могли бы вы помочь мне разобраться, что я делаю неправильно.