и хотя я нашел много статей и другой информации о том, как 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 () всегда блокируются до истечения времени ожидания (в этот момент я наконец вижу, что содержимое находится в буфере).
Я не совсем понимаю, как правильно использовать метод блокировки, поскольку он всегда зависает при чтении.