尝试登录网站单击按钮(Httpwebrequest - cookies)

本文关键字:Httpwebrequest cookies 按钮 登录 网站 单击 | 更新日期: 2023-09-27 18:30:21

几周前我刚开始使用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(); 

好吧,由于某种原因,它不起作用,我已经尝试了一个星期了。

我尝试显示标题 - 在第一次请求之后,看看我得到了哪些标题。 然后查看我构建的cookie(cookieJar2),似乎它们不一样。

无论如何,关于此事的任何帮助都将很棒,并高度赞赏。 我试图提供尽可能多的细节。

尝试登录网站单击按钮(Httpwebrequest - cookies)

使用

Fiddler 和/或 Wireshark 并比较成功的请求(使用某些浏览器发出)和失败的请求......然后通过删除/添加所需的任何内容来模仿代码中的成功请求,通常 Cookie 是这种情况的"罪魁祸首"之一 - 有时它是特定的引用或类似的......

一些网站对自动登录使用保护措施...

除了编码部分:检查他们的条款/条件是否禁止以这种方式自动登录!