如何正确登录网站? 403禁止错误

时间:2017-09-29 15:13:24

标签: c# .net httpwebrequest httpwebresponse

所以,我刚刚进入HttpWebRequest&回复,我设法登录到一个非常基本的网站。 现在,我目前正在尝试做同样的事情,但要“更高级”的网站。 我用fiddler来获取URL&标题,但由于某种原因,我仍然得到一个Forbidden 403错误。我尝试使用有效的用户名登录密码以及无效密码只是为了看到差异,而且没有密码。 我需要帮助理解为什么我收到此错误。 我在网上读到可能导致这种情况的原因,我所能找到的只是我需要设置我所做的标题。我想我至少得到了所有这些。

还有一个小问题,那就是csrf令牌。这真的不是问题,因为你可以只执行一次空登录并为你生成一个令牌并一遍又一遍地使用它。 无论如何..我不知道为什么我会得到403 ERROR。

我尝试登录的网站是https://bokon.se

private void btnLogin_Click(object sender, EventArgs e)
        {
            //Get the post params & convert them correctly.
            string useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36";

            string postData = $"csrfmiddlewaretoken=kwQfWirQCDU3Xfr4fm1i8AmEJmr15JlK&username={tbPassword.Text}&password={tbUsername.Text}&login_form=Logga+in";
            byte[] postBytes = Encoding.ASCII.GetBytes(postData);

            //Create the request to the server
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("https://bokon.se/konto/login/?next=");
            //httpWebRequest.Headers["Content-Type:"] = "application/x-www-form-urlencoded";
            httpWebRequest.ContentType = "application/x-www-form-urlencoded";
            httpWebRequest.UseDefaultCredentials = true;
            httpWebRequest.Headers["Referrer"] = "https://bokon.se/konto/login/?next=";
            httpWebRequest.UserAgent = useragent;
            httpWebRequest.KeepAlive = true;
            httpWebRequest.Method = "POST";
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.ContentLength = postData.Length;

            using (Stream stream = httpWebRequest.GetRequestStream())
            {
                stream.Write(postBytes, 0, postBytes.Length);
            }
//This is where the error occurs.
            using (HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse())
            using (var streamreader = new StreamReader(response.GetResponseStream()))
            {
                var result = streamreader.ReadToEnd();
                Debug.Print(result);
            }
            //tsLabel.Text = "Success.";
        }

0 个答案:

没有答案