C#:如何登录并保持其有效性,然后再进行一次网络请求

本文关键字:然后 请求 网络 一次 何登录 登录 有效性 | 更新日期: 2023-09-27 17:59:16

private void button1_Click(object sender, EventArgs e)
{
    string userName = textBox1.Text;
    string password = textBox2.Text;
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.youmint.com/LoginVerification.php?name="+userName+"&pass="+password+"&agreement=true&checkvalue=true");
    request.Method = "GET";
    request.KeepAlive = true;
    request.Headers.Add("Keep-Alive: 300");
    WebResponse response = request.GetResponse();
    Stream dataStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(dataStream);
    string responseFromServer = reader.ReadToEnd();
    if (responseFromServer.Equals(""))
        MessageBox.Show("Successfully logged in!!");
    else if (responseFromServer.Equals("1"))
        MessageBox.Show("Login failed!");
    request = (HttpWebRequest)WebRequest.Create("http://www.youmint.com/FreeSms.html");
    response = request.GetResponse();
    dataStream = response.GetResponseStream();
    reader = new StreamReader(dataStream);
    responseFromServer = reader.ReadToEnd();
    /*secret code :P */
    reader.Close();
    dataStream.Close();
    response.Close();
 }

所以,这是我的代码。。。第一个webrequest登录到网站。它在浏览器中运行良好,如果登录不正确,则返回1。然后第二个是对同一网站的网页的正常网络请求。但是登录已经消失了,如果我没有登录,我得到的响应就是我得到的!有人能告诉我我做错了什么吗?我该如何让它活着?我必须使用一个看不见的webbroswer控件或类似的东西吗?

C#:如何登录并保持其有效性,然后再进行一次网络请求

这与"保持活力"无关。您需要在请求之间保留会话cookie。为此,您首先需要为登录请求启用cookie(请阅读HttpWebRequest文档,这有点不明显(。然后你需要把饼干和下面的所有测试一起传递出去。

此外,请使用using()

@liho1eye是正确的。以下是来自HttpWebRequest页面的更多信息:

出于安全考虑,cookie是默认情况下禁用。如果你想使用cookies,使用CookieContainer属性以启用Cookie。

您需要引用HttpWebResponse。cookie属性以获取初始会话令牌cookie。

编辑:

下面是一个快速而肮脏的示例,用于向页面发出请求,并将响应cookie传输到下一个请求。没有做太多的测试或验证(所以要小心!(——只是为了让你了解这种方法。

        //this only has login/password info, you may need other parameters to trigger the appropriate action:
        const string Parameters = "Login1$username=pfadmin&Login1$Password=password";
        System.Net.HttpWebRequest req = (HttpWebRequest)System.Net.WebRequest.Create("http://[WebApp]/Login.aspx");
        req.Method = "GET";
        req.CookieContainer = new CookieContainer();
        System.Net.HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
        //Create POST request and transfer session cookies from initial request
        req = (HttpWebRequest)System.Net.WebRequest.Create("http://localhost/AdminWeb/Login.aspx");
        req.CookieContainer = new CookieContainer();
        foreach (Cookie c in resp.Cookies)
        {
            req.CookieContainer.Add(c);
        }
        req.ContentType = "application/x-www-form-urlencoded";
        //...continue on with your form POST