Войти на сайт используя c # - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь зайти на один из наших внутренних веб-сайтов, чтобы использовать небольшую программу с помощью HttpWebRequest. Вы можете найти следующий код, который я нашел в Этот вопрос , чтобы войти на сайт. Пожалуйста, найдите мой измененный код ниже в соответствии с нашим сайтом.

class LoginSite
{
    CookieContainer Cookies = new CookieContainer();

   public void Main()
    {
        Login();

        // Now the cookies in "Cookies" are all set.
        // Ensure you set CookieContainer on all subsequent requests
    }

    void Login()
    {
        var wr = (HttpWebRequest)WebRequest.Create("http://portal.test.com/Login.aspx");
        wr.Method = "POST";
        wr.ContentType = "application/x-www-form-urlencoded";
        wr.Referer = "http://portal.test.com/Login.aspx"; // my tests show this is needed
        wr.CookieContainer = Cookies;

        var parameters = new Dictionary<string, string>{
        //{"__LASTFOCUS", ""},
        //{"__EVENTTARGET",""},
        // {"__EVENTARGUMENT",""},
        //{"__VIEWSTATE","INdS1F45fzWYVwKD8b1b5x5Mr09nYrvS3hrSO4EAXFHVwtN76gSoToydwoOlIf1nI+KIxVR5CWiN2c5NOPO7kjTW7DbiNG2ZZ5Mpd0pYvN3tt68I6MvZ1dGHMJFhgJQ1YYpQQ+V6oonOrncJ6lwk69LaPVuSUSAPSubgSBoNYLfEy28kHirrNNc0uburWHQ9DK0zHwwod8gWKS8sz+qSjWOzV0PZyX7HhMQjc4MAD+RkHQMgeyOMqghODYn2ZW5mCBcY34ISL328aPGZmb6XERo+9LArRwASFBNqyFygZ1YJaUwReOdceEpTtg6TEOJb"},
        //{"__VIEWSTATEGENERATOR", "A43BD702"},
        //{"__EVENTVALIDATION","ngIch5+O80dcLktVDBbT/QqkZ8TvAm/HNMQVR54bGv0oQRxd2LqBISWhjdwgvwjnbaGSBAFDFcuvCgmdBvAJ/eBUSCNB9vMGfPzhecbdCFcGVzKy7/d49KNK/f8D+QBrT912wDav1/LFqFn32Op+HVOj2qLwuuvRLF+v4NL/xhpu22QNXXO/B4r/OAYJgtFYlZCg1k4jO7QacNdjaoJ02KVj0xBm9fWbr02spbCUld7+fY9shCyEcthLpEag8OryqKQlYtDgx8UxCc6bj5GKQw=="},
        {"ctl00$cphBody$LogIn1$txtUserName", "testuser"},
        {"ctl00$cphBody$LogIn1$vceUserName_ClientState", ""},
        {"ctl00$cphBody$LogIn1$txtPassword", "testpwd"},
         {"ctl00$cphBody$LogIn1$vecPassword_ClientState", ""},
          {"ctl00$cphBody$LogIn1$btnSubmit", "Submit"}
    };

        using (var requestStream = wr.GetRequestStream())
        using (var writer = new StreamWriter(requestStream, Encoding.UTF8))
            writer.Write(ParamsToFormEncoded(parameters));

        using (var response = (HttpWebResponse)wr.GetResponse())
        {
            // here you need to detect a correct login... this might be one of the cookies.
            // if incorrect throw an exception or something.
            using (StreamReader sr = new StreamReader(response.GetResponseStream()))
            {
              var  result = sr.ReadToEnd();
            }
        }
    }

    string ParamsToFormEncoded(Dictionary<string, string> parameters)
    {
        return string.Join("&", parameters.Select(kvp =>
            Uri.EscapeDataString(kvp.Key).Replace("%20", "+") + "=" + Uri.EscapeDataString(kvp.Value).Replace("%20", "+")
        ).ToArray());
    }
}

Я добавил точные значения формы в параметры, я не получил никаких исключений при получении ответа, но количество файлов cookie, которое я получаю, равно нулю. Может ли кто-нибудь помочь мне, пожалуйста, я уже потратил много времени на это. Ниже приведен снимок экрана данных формы. enter image description here

1 Ответ

0 голосов
/ 08 мая 2018

Я могу получить новый файл cookie при отсутствии комментариев LASTFocus, __ EVENTTARGET, __ EVENTARGUMENT, __ VIEWSTATE, __ VIEWSTATEGENERATOR, __ EVENTVALIDATION и добавленных wr.AllowAutoRedirect = false. Но я не получил новую перенаправленную страницу, т.е. http://portal.test.com/Home.aspx в ответ. Вместо этого я получаю ответ, как Object Move

Объект перемещен в здесь .

...