Задать вопрос
@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 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 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
Похоже, что ошибка на самом сервере. Киньте ссылку на страницу, которая выдает ошибку.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы