C#WebRequest登录会话

好吧我昨天试过问这个问题,但我不确定我是否提供了足够的信息,我得到了答案,但它对我没用.基本上我正在做的是用户打开这个窗体表单应用程序并登录.之后,他们将一些文本输入文本框并单击运行.此时,运行功能正在向需要登录的服务器(最初在打开程序后完成的登录)进行webrequest.由于某种原因,在执行第二个请求时仍然没有看到用户登录,即使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();

P.S.:webrequests的域名是不同的.首先是abc.com第二个是123.com唯一的问题是第一个域(即登录)是123.com等内部Web应用程序的全局登录,那么我将如何使用来自第一个域的登录会话第二个域名?

能帮助我弄清楚我做错了吗?

最佳答案 我发现发生的事情是它正在重新启动到与第二个(123.com)相同的域中的子域以使用登录.显然他们有这个基于多个域的全局登录系统来传递cookie.上面的代码可以工作,我现在可以使用它.谢谢!!

点赞