.NET, не удается опубликовать форму HttpWebResponse - PullRequest
0 голосов
/ 17 декабря 2009

Я хочу опубликовать форму с определенными данными, но это не удается. В случае успешного входа в систему CookieContainer должен содержать поле «username». Я использовал FireBug + firefCookie, чтобы просмотреть ответный файл cookie, это не так. И просмотрите ответивший HTML, он не говорит, что я неверный логин ..

Еще одна вещь, которую я считаю, это имя поля данных поста, я должен использовать идентификатор или имя?

<input name="ctl00$ContentPlaceHolder1$txt_email" type="text" size="15" id="ctl00_ContentPlaceHolder1_txt_email" /> <input name="ctl00$ContentPlaceHolder1$txt_pass" type="password" maxlength="8" size="15" id="ctl00_ContentPlaceHolder1_txt_pass" /> <input id="ctl00_ContentPlaceHolder1_cb_remember_login" type="checkbox" name="ctl00$ContentPlaceHolder1$cb_remember_login" checked="checked" />

Ниже приведен код,

        string LoginUrl = "http://forum5.hkgolden.com/login.aspx";

        HttpWebRequest request  = (HttpWebRequest)WebRequest.Create(LoginUrl);
        CookieContainer cookiecontainer  = new CookieContainer();
        request.CookieContainer = cookiecontainer;
        request.Method = WebRequestMethods.Http.Post;
        request.ContentType = "application/x-www-form-urlencoded";

        string PostData = Uri.EscapeDataString("txt_email=demo@mymail.com&txt_pass=mypassword&cb_remember_login=on");

        Byte[] PostBuffer = Encoding.GetEncoding("BIG5").GetBytes(PostData);
        request.ContentLength = PostBuffer.Length;
        Stream PostStream = request.GetRequestStream();
        PostStream.Write(PostBuffer, 0, PostBuffer.Length);
        PostStream.Close();

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        cookiecontainer.Add(new Uri("http://www.hkgolden.com"), response.Cookies); //Add CookiesCollection to Container

        Encoding enc = Encoding.GetEncoding("BIG5");
        StreamReader ResponseStream = new StreamReader(response.GetResponseStream(), enc);
        string strHtml = ResponseStream.ReadToEnd();
        response.Close();
        ResponseStream.Close();

        System.Diagnostics.Debug.Print(strHtml);

1 Ответ

0 голосов
/ 17 декабря 2009

Первая проблема может быть вызвана тем, что ваш http-запрос не содержит достаточных данных. Если вы войдете в систему через веб-браузер и перехватите http-трафик, вы заметите огромную разницу между данными, опубликованными вашим приложением и браузером. Попробуйте добавить эти недостающие поля в ваш код.

Когда вы отправляете html-форму, поведение по умолчанию - все элементы с атрибутом name внутри формы будут публиковаться на сервере. Формат опубликованных данных: Element1_Name = Element1_value & Element2_Name = Element2_value. Поэтому name является правильным атрибутом для использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...