@Alex45G

Почему не выходит получить нужную страницу из интернета C#?

Всем здравствуйте!
Я новичок в С#, пытаюсь парсить нужные мне страницы в интернете. Парсер пишу в Visual Studio 2015. Столкнулся с такой проблемой: при попытке получить нужную мне страницу через прокси получаю вместо страницы следующий текст:
package ru.sbogomolov.template;
public class servletBase extends HttpServleterror: java.lang.NullPointerException

Причём только при попытке получить только определённый класс страниц. Любые другие страницы сайта получаю нормально. Может ли это быть защитой от автоматического чтения страниц? И как такое можно обойти? Причём проверял, запрашиваемая мной страница на сайте есть.
Используемый код:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://id.npfte.ru/identDeclDrug/main?act=submit&countryE=countryE_RU&codeCD=codeCD_%D0%A4%D0%9C01&CodeSybbol=CodeSybbol_%D0%94&shortNum=54904&DateTypeSearch=beginDate&day=day_26&mount=mount_11&year=year_2014"); 
            
            WebProxy myproxy = new WebProxy(textBox1.Text, Convert.ToInt32(textBox2.Text));                        
            req.Proxy = myproxy;
            req.Timeout = 50000; //установили таймаут (ожидаем 30 секунд ответа на запрос) 
            try
            {
                System.Diagnostics.Stopwatch swatch = new System.Diagnostics.Stopwatch(); // создаем объект
                swatch.Start(); // старт замера времени
                //из ответа получаем входной поток
                HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                swatch.Stop(); // стоп замера времени
                MessageBoxButton buttOk = MessageBoxButton.OK;
                MessageBox.Show("Время вычисления = " + swatch.ElapsedMilliseconds / 1000.0, "Уведомление", buttOk);

                StreamReader istrm = new StreamReader(resp.GetResponseStream(), Encoding.GetEncoding(1251));
                //resp.Close();
                for (int i = 1; ; i++)
                {
                    
                        ch = istrm.Read();
                        if (ch == -1) break;
                        if (ch == 10) //перенос строки
                        {
                            textBox.Text = textBox.Text + textBuffer + Environment.NewLine;
                            textBuffer = "";
                        }
                        textBuffer = textBuffer + (char)ch;
                }
                textBox.Text = textBox.Text + textBuffer;
                MessageBox.Show("Конец!", "Уведомление", buttOk);
                //закрываем поток, содержащий ответ. При этом автоматически закроется и входной поток istrm
                resp.Close();
            }
            catch (System.Net.WebException ex)
            {
                MessageBoxButton buttOk = MessageBoxButton.OK;  //Не удалось подключиться к прокси! :( 
                MessageBox.Show(ex.Message + textBox1.Text + Convert.ToInt32(textBox2.Text), "Ошибка", buttOk);               
            }
        }
  • Вопрос задан
  • 429 просмотров
Пригласить эксперта
Ответы на вопрос 3
@VZVZ
Reverse-Engineer, Software Developer, Architect
> Может ли это быть защитой от автоматического чтения страниц? И как такое можно обойти?
Может. Обойти можно, если с помощью сниффера (например, Fiddler) посмотреть запросы от браузера и 100% имитировать их на C# (учесть все заголовки, куки и т.д.)
Также в самом Fiddler можно и поэкспериментировать с заголовками и куками (вкладка Composer)
Ответ написан
Комментировать
vpuhoff
@vpuhoff
Программист в свободное от работы время
Возможно хедеров не хватает и поэтому он не хочет строить страницу, попробуйте добавить хедеров такого вида:
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Host:id.npfte.ru
Referer:id.npfte.ru/identDeclDrug/main?act=submit&countryE...
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
Ответ написан
Комментировать
wkololo_4ever
@wkololo_4ever
Похоже, что ошибка на самом сервере. Киньте ссылку на страницу, которая выдает ошибку.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы