и хотя я нашел много статей и другой информации о том, как ПОЛУЧИТЬ и ПОСТАВИТЬ, используя 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) все еще не удается войти в систему. Я создал форму, и из этой формы я ввожу парольи имя пользователя.Когда он делает это, он говорит, что потерпел неудачу, и это нормально.Я также использую Фиддер, чтобы посмотреть, что все происходит.
Итак, я знаю, что я делаю что-то не так из кода ниже.
Однако, когда я перехожу к другому веб-приложению, в строке появляется следующая ошибка:
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
"Невозможно задать Content-Length или Chunked Encoding для операции, которая незаписать данные. "
Я пытаюсь найти, что не так, и все, что я сказал, что это из-за перенаправления 302 ...
Итак, глядя в Fiddler, я вижуогромная разница между тем, когда я пытаюсь опубликовать данные, и когда я вхожу через веб-страницу.Так что я знаю, что делаю недостаточно, но я не знаю, где искать.
Моя цель - создать приложение, которое сможет войти на сайт, а затем с помощью их функции поиска вытащитьнеобходимые данные, которые в настоящее время мы имеем, наши пользователи делают вручную, если я смогу автоматизировать некоторые утомительные работы, это действительно поможет всем.Тем не менее, я в настоящее время застрял при входе в систему, понимании файлов cookie и т. Д. Кроме того, на веб-сайте используются фреймы, я не знаю, будет ли это проблемой, но я решил опубликовать эту информацию, на всякий случайэто еще одно препятствие, с которым я еще не сталкивался.
Дайте мне знать, если вы хотите, чтобы я увидел больше кода, в настоящее время я использую httpwebrequest и httpwebresponse и прочитал другую информацию о веб-клиенте.
Я скачал и поиграл с htmlagilitypack, но в настоящее время не уверен, что я на 100% хорош в том, как все это работает.
Если вам известны какие-либо хорошие статьиили другую информацию, которая более подробно охватывает эту тему или есть что-то, что я могу попробовать, дайте мне знать.
Большое спасибо за ваше время.
Обновление с новым кодом, см. мой комментарийниже также: - Хорошо, я обнаружил, что из-за перенаправления я получаю одно сообщение об ошибке: «Content-Length или Chunked Encoding и т. д.», и поэтому я включил allowAutoRedirect = false, и теперь я ищутег "location", и перенаправление себя и т. д., который избавился от этого сообщения, однако, я все еще не захожу на сайт, что разочаровывает, и я не могу понять, почему в данный момент.: S
private void start_post2()
{
string username = txtUser.Text;
string password = txtPassword.Text;
Uri link = new Uri(txtLink.Text);
string postArgs = string.Format(@"userId={0}&password={1}", username, password);
byte[] buffer = Encoding.ASCII.GetBytes(postArgs);
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.ClientCertificates.Add("Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
WebReq.AllowAutoRedirect = false;
WebReq.Accept = "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
WebReq.Accept = "*/*";
//WebReq.Headers.Add(HttpRequestHeader.Cookie, cookieJar);
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();
if (WebResp == null) throw new Exception("Response is null");
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 (!string.IsNullOrEmpty(WebResp.Headers["Location"]))
{
string newLocation = WebResp.Headers["Location"];
//Request the new location
WebReq = (HttpWebRequest)WebRequest.Create(newLocation);
WebReq.Method = "GET";
WebReq.ContentType = "application/x-www-form-unlencoded";
WebReq.AllowAutoRedirect = false;
WebReq.CookieContainer = cookieJar;
WebReq.CookieContainer.Add(WebResp.Cookies);
buffer = Encoding.ASCII.GetBytes("userId=" + username + "&password=" + password);
WebReq.ContentLength = buffer.Length;
PostData = WebReq.GetRequestStream();
PostData.Write(buffer, 0, buffer.Length);
PostData.Close();
WebResp = (HttpWebResponse)WebReq.GetResponse();
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();
}
}
else if (!string.IsNullOrEmpty(WebResp.Headers["Set-Cookie"]))
{
// thinking...
}
foreach (Cookie cookie in cookieJar.GetCookies(link))
{
MessageBox.Show(cookie.Name.ToString() + Environment.NewLine + cookie.Value.ToString() + Environment.NewLine + cookie.Path.ToString() + Environment.NewLine + cookie.Domain.ToString());
}
StreamReader sr = new StreamReader(WebResp.GetResponseStream());
string responseHtml = sr.ReadToEnd().Trim();
SearchPatient(WebReq, username, password);
}