尝试点击按钮登录网站
本文关键字:登录 网站 按钮 | 更新日期: 2023-09-27 18:30:08
我几周前刚开始玩C#。我正在努力完成一项任务,但我不确定现在的做法是否正确。
我正在尝试登录一个网站(在我的情况下是WordPress网站-为了更好的选择),并使用C#在管理面板中导航
到目前为止,我所做的是创建一个新项目-Windows窗体应用程序。
以下代码-将带有密码/用户名和其他参数的请求发送到网站作为POST
private void button2_Click(object sender, EventArgs e)
{
CookieContainer cookieJar = new CookieContainer();
CookieContainer cookieJar2 = new CookieContainer(); // will use this later
string testaa = ""; // will use this later
string paramaters = "log=xxxx&pwd=xxxx&testcookie=1&redirect_to=http://www.example.com/wp-admin/&wp-submit=Log In";
string strResponse;
HttpWebRequest requestLogin = (HttpWebRequest)WebRequest.Create("http://www.lyndatobin-howes.com/wp-login.php");
requestLogin.Method = "POST";
requestLogin.AllowAutoRedirect = false;
requestLogin.ContentType = "application/x-www-form-urlencoded";
requestLogin.CookieContainer = cookieJar;
requestLogin.ContentLength = paramaters.Length;
StreamWriter stOut = new StreamWriter(requestLogin.GetRequestStream(), Encoding.ASCII);
stOut.Write(paramaters);
stOut.Close();
}
然后我有这个代码来获取响应的cookie。
HttpWebResponse response = (HttpWebResponse)requestLogin.GetResponse();
foreach (Cookie c in response.Cookies)
{
cookieJar2.Add(new Cookie(c.Name, c.Value, c.Path, c.Domain));
}
然后我用这个来读取响应+关闭一些流。
StreamReader stIn = new StreamReader(requestLogin.GetResponse().GetResponseStream());
strResponse = stIn.ReadToEnd();
string responseFromServer = stIn.ReadToEnd();
webBrowser1.DocumentText = responseFromServer;
stIn.Close();
response.Close();
然后我尝试使用上面的cookie来访问我想要访问的页面,如下所示:
HttpWebRequest requestLogin2 = (HttpWebRequest)WebRequest.Create("http://www.example.com/wp-admin/");
requestLogin2.Method = "POST";
requestLogin2.AllowAutoRedirect = false;
requestLogin2.ContentType = "application/x-www-form-urlencoded";
requestLogin2.CookieContainer = cookieJar2;
requestLogin2.ContentLength = paramaters.Length;
StreamWriter stOut2 = new StreamWriter(requestLogin2.GetRequestStream(), System.Text.Encoding.ASCII);
stOut2.Write(paramaters);
stOut2.Close();
StreamReader stIn2 = new StreamReader(requestLogin2.GetResponse().GetResponseStream());
strResponse = stIn2.ReadToEnd();
string responseFromServer2 = stIn2.ReadToEnd();
webBrowser1.DocumentText = responseFromServer2;
richTextBox2.Text += "'n'n'n" + responseFromServer2;
stIn.Close();
由于某种原因,它不起作用。我已经试了一个星期了。
我试着在第一次请求后显示标题,看看我能得到什么标题。然后看了看我做的饼干(cookieJar2),它们似乎不一样了。。
无论如何,在这件事上提供任何帮助都将是令人敬畏和高度赞赏的。我尽可能多地提供细节。
关于您的代码,我首先注意到您在初次登录时调用了GetResponse()
两次:
HttpWebResponse response = (HttpWebResponse)requestLogin.GetResponse();
和
StreamReader stIn = new StreamReader(requestLogin.GetResponse().GetResponseStream());
因此,您进行了两次登录请求,并将返回两个不同的cookie。这就是cookieJar2
中的cookie与您稍后输出的内容不匹配的原因。重用response
对象:
StreamReader stIn = new StreamReader(response.GetResponseStream());
接下来,当你试图加载管理页面时,不要向它发送POST
。你的第二个请求应该是GET
,以检索页面的内容。