C #: Как войти в систему и сохранить его в силе и сделать еще один веб-запрос? - PullRequest
0 голосов
/ 16 июня 2011
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();
 }

Итак, это мой код ... Первый веб-запрос входит на сайт.Он отлично работает в браузере и возвращает 1, если логин не верен.Тогда второй - это обычный веб-запрос на веб-страницу того же сайта.Но логин уже пропал, и я получаю ответ, если не вошел в систему!Может кто-нибудь сказать, пожалуйста, что я делаю не так?Как мне сохранить это в живых?Нужно ли использовать невидимый элемент управления webbroswer или что-то в этом роде?

Ответы [ 2 ]

3 голосов
/ 16 июня 2011

Это не имеет ничего общего с "поддерживать жизнь". Вам нужно сохранить сессионный cookie между запросами Для этого вам сначала нужно включить куки для вашего запроса на вход (читайте HttpWebRequest документы - это немного неочевидно). Затем вам нужно передать этот файл cookie со всеми следующими запросами.

Также, пожалуйста, используйте using()

2 голосов
/ 17 июня 2011

@ liho1eye правильно.Вот еще немного информации со страницы HttpWebRequest:

По соображениям безопасности куки-файлы по умолчанию отключены.Если вы хотите использовать файлы cookie, используйте свойство CookieContainer, чтобы включить файлы cookie.

Чтобы получить исходный файл cookie для маркера сеанса, вам нужно обратиться к свойству HttpWebResponse.Cookies.

Редактировать:

Вот быстрый и грязный пример отправки запроса на страницу и передачи файлов 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
...