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控件或类似的东西吗?
这与"保持活力"无关。您需要在请求之间保留会话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