Как мне входить в систему, перемещаться и возвращать данные с защищенного веб-сайта, пока все, что я делаю, не работает

и хотя я нашел много статей и другой информации о том, как GET и POST с использованием HttpWebRequest и Response, Мне трудно заставить вещи работать так, как я ожидал, что они будут работать.

Я обдумывал несколько идей, которые нашел, но пока ничего не работает ... Я отправлю свой код:

private void start_post()
    {
        string username = txtUser.Text;
        string password = txtPassword.Text;
        string strResponce;
        byte[] buffer = Encoding.ASCII.GetBytes("username="+username+"&password="+password);
        HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(txtLink.Text);
        WebReq.Method = "POST";
        //WebReq.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
        WebReq.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
        WebReq.Headers.Add("Translate", "F");
        WebReq.AllowAutoRedirect = true;
        WebReq.CookieContainer = cookieJar;
        WebReq.KeepAlive = true;
        WebReq.ContentType = "application/x-www-form-urlencoded";
        WebReq.ContentLength = buffer.Length;
        Stream PostData = WebReq.GetRequestStream();
        PostData.Write(buffer, 0, buffer.Length);
        PostData.Close();

        HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
        //txtResult.Text = WebResp.StatusCode.ToString() + WebResp.Server.ToString();

        Stream answer = WebResp.GetResponseStream();
        StreamReader _answer = new StreamReader(answer);
        strResponce = _answer.ReadToEnd();
        //txtResult.Text = txtResult.Text + _answer.ReadToEnd();

        answer.Close();
        _answer.Close();

        foreach (Cookie cookie in WebResp.Cookies)
        {
            cookieJar.Add(new Cookie(cookie.Name.Trim(), cookie.Value.Trim(), cookie.Path, cookie.Domain));
            txtResult.Text += cookie.Name.ToString() + Environment.NewLine + cookie.Value.ToString() + Environment.NewLine + cookie.Path.ToString() + Environment.NewLine + cookie.Domain.ToString();
        }

        if (strResponce.Contains("Log On Successful") || strResponce.Contains("already has a webseal session"))
        {
            MessageBox.Show("Login success");
            foreach (Control cont in this.Controls)
            {
                cont.Visible = true;
            }
        }
        else
        {
            MessageBox.Show("Login Failed.");
        }


    }

Здесь, в коде, я могу полностью перейти к внизу, и мне все равно не удалось войти в систему, когда я перехожу на http://www.comicearth.com (мой собственный сайт, php и apache). Я создал форму и из этой формы ввожу пароль и имя пользователя. Когда он это делает, он говорит, что не удалось, и это нормально. Я также использую Fidder, чтобы смотреть, что все происходит.

Итак, я знаю, что делаю что-то не так из приведенного ниже кода.

Однако, когда я перехожу к другому веб-приложению, я получаю следующую ошибку в строке:

HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();

" не считая всего побайтного чтения, я не могу понять, как это поведение по умолчанию на самом деле предназначено для использования ... Я никогда не знаю точного размера ответа, возвращаемого с сервера, поэтому мои вызовы SocketChannel.read () всегда блокируются до истечения времени ожидания (в этот момент я наконец вижу, что содержимое находится в буфере).

Я не совсем понимаю, как правильно использовать метод блокировки, поскольку он всегда зависает при чтении.

6
задан Riyad Kalla 7 February 2011 в 20:54
поделиться