Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизация на сайте и сохранение страницы, Проьлемы с авторизацией 
V
    Опции темы
falconna
Дата 19.4.2011, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.4.2009

Репутация: нет
Всего: нет



День добрый. Есть такое задание: необходимо авторизоваться на сайте, перейти по ссылке и сохранить xml-код страницы.
Пыталась реализовывать при помощи WebBrowser и HttpWebRequest-HttpWebResponse.
В первом случае авторизация проходит успешно, но доступен лишь хтмл-код нужной страницы.
Во втором - выдается сообщение "Удаленный сервер возвратил ошибку: (401) Несанкционированный". Куки я сохраняю, но каким-то образом информация об авторизации теряется. Код:
Код

public void GetXML(string url)
        {
            string Output = null;
            string accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, */*\r\n";
            string useragent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon; .NET CLR 2.0.50727; .NET CLR 3.0.04506.590)";
            string sCookies = "";

            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://hh.ua/logon.do?username=Мой_Логин&password=Мой_пароль");
            request.Method = WebRequestMethods.Http.Get;
            request.Accept = accept;
            request.UserAgent = useragent;
            request.KeepAlive = true;
            try
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                //Сохраняем куки
                if (!String.IsNullOrEmpty(response.Headers["Set-Cookie"]))
                {
                    sCookies = response.Headers["Set-Cookie"];
                }
            }
            catch (WebException WE)
            {
                // Сообщение об ошибке
                MessageBox.Show(WE.Message);
                return;
            }

            request = (HttpWebRequest)HttpWebRequest.Create(url);
            if (!String.IsNullOrEmpty(sCookies))
            {
                request.Headers.Add(HttpRequestHeader.Cookie, sCookies);
            }

            try
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                //Считываем данные из запроса
                StreamReader DataRead = new StreamReader(response.GetResponseStream());
                //Записываем в строку
                Output = DataRead.ReadToEnd();
                StreamWriter sw = File.CreateText(@"C:\resumesSearch.xml");
                sw.WriteLine(Output);
                sw.Close();
                DataRead.Close();
            }
            catch (WebException WE)
            {
                //Сообщение об ошибке
                MessageBox.Show(WE.Message);
                return;
            }
        }


Будьте добры, подскажите, в чем может быть ошибка?
Ну или посоветуйте, есть ли у WebBrowser возможность сохранения страниц в xml-формате (использование конвертеров типа sgml reader толку не дает).
PM MAIL   Вверх
DenWPF
Дата 19.4.2011, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



не чего вам не вернет в xml. Вы достаете html и конвертируете его в xml если конечно это удастся.
PM MAIL   Вверх
falconna
Дата 19.4.2011, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.4.2009

Репутация: нет
Всего: нет



DenWPF, а еще ведь есть webClient со всякими Download-методами. Они тоже не помогут?
PM MAIL   Вверх
DenWPF
Дата 19.4.2011, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



Пойми, то что ты делаешь, это (почти) тоже самое что зайти через браузер на сайт и просмотреть исходных код, и ты увидишь именно html.

Если html валидный то можно легко его конвертировать.
PM MAIL   Вверх
falconna
Дата 19.4.2011, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.4.2009

Репутация: нет
Всего: нет



DenWPF, ну гм... При просмотре в браузере HTML-кода нужной мне страницы отображается именно xml, а не хтмл. Вот я и подумала, что при скачивании ее тоже могу получить нужный формат. Разве нет?
PM MAIL   Вверх
DenWPF
Дата 19.4.2011, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



аааа так бы и говорил. 

только я не понял, xml тебе в чем нужен ? в файле? 
тогда просто строку сохрани, а можешь через, вроде,  XmlDocument xd = new XmlDocument();  xd.Load(файл)  либо должно быть xd.LoadXml(строка)
PM MAIL   Вверх
falconna
Дата 19.4.2011, 16:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.4.2009

Репутация: нет
Всего: нет



DenWPF, Ну это понятно. Проблема была в том, что при помощи WebBrowser (свойство DocumentText) нельзя было (в данном конкретном случае) получить строку xml, а потому и в xml-документ загружать было нечего. 
В общем, проблему уже решила. Но большое спасибо за участиеsmile

Вот. Может кому-то пригодится.
Код

static void GetXML(string url, string login, string password, string path)
        {
            //Создаем запрос
            WebRequest request = WebRequest.Create(url);
            //Задаем данные аутентификации
            request.Credentials = new NetworkCredential(login, password);
            try
            {
                //Отправляем запрос, получаем код страницы
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream dataStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream);
                //Считываем данные
                string responseFromServer = reader.ReadToEnd();
                //Записываем в файл
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(responseFromServer);
                doc.Save(path);
                reader.Close();
                dataStream.Close();
                response.Close();
                Console.WriteLine("Готово!");
                Console.ReadLine();
            }
            catch (WebException WE)
            {
                //Сообщение об ошибке
                Console.WriteLine(WE.Message);
                Console.ReadLine();
                return;
            }
        }

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1036 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.