0

Есть страничка в интернете. Вот ссылка на страницу. В ней содержится табличка с данными. Пытаюсь ее скачать.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
HttpWebRequest request = WebRequest.CreateHttp(tbBaseURI.Text);
var response = (HttpWebResponse)request.GetResponse();           
Stream responseStream = response.GetResponseStream();
StreamReader streamReader = new StreamReader(responseStream);
string s = streamReader.ReadToEnd();

Страница скачивается, но вместо таблицы вижу надпись загрузка данных. По сути, нужно ~5 сек, что бы таблица загрузилась.

Как же получить полностью загруженную страницу? Может можно как-то сделать запрос, а начинать читать через 5 сек.

MaximK
  • 2,691
  • Не выйдет, там же загрузка контента через ajax, а это javascript. Смотрите в сторону каких нибудь браузерных движков, которые умеют JS. –  Mar 06 '20 at 13:16
  • Или смотрите откуда страничка качает данные для таблицы и вместо того, чтобы дергать страничку, качайте данные напрямую. – tym32167 Mar 06 '20 at 13:50
  • 1
    Как же я устал людей отговаривать от неправильных действий в виде селениума и других ненужных агрегаторов. Это же в 90% лишнее, совсем! Будто вы хотите прихлопнуть комара, но у вас не получается и вы запускаете ядерную ракету по городу. Почти любой подобный сайт отдает данные при помощи API и этот не исключение. – EvgeniyZ Mar 06 '20 at 13:55
  • @EvgeniyZ подскажите тогда, как получить данные из следующего запроса по (он идет через один после указанного вами) /ppa/api/rest/services/ppa/public/organizations/additionalinfo . Это раздел дополнительной информации. Сервер просто так ее не отдает. – MaximK Mar 07 '20 at 07:24
  • 1
    @MaximK Ну смотрите, это POST запрос. Открываете как показано в ссылке, что я вам давал программу Postman, заносите туда адрес, выбираете POST тип запроса, отправляете. В ответ вам сервер дает Cannot consume content type, думаем логически, Content type - это один из заголовков, пробуем поставить его таким, как на оригинальном запросе, отправляем и видим, что сервер теперь нам дает No content to map to Object due to end of input, то есть у нас нет контента. Тип контента мы задали в заголовке как application/json, значит и контент надо отправлять в виде JSON. – EvgeniyZ Mar 07 '20 at 14:21
  • 1
    Идем в Body, ставим тип Raw (JSON) и копируем туда контент из запроса ({"organizationGuids":["c5a5aeb3-4c28-4558-b472-abfa87f98ec3"]}), пробуем отправить и видим, что сервер нам успешно отдал все нужные данные. Исходя из этого, вам при отправке запроса нужно установить заголовок Content-Type и отправить данные в формате JSON. Кстати, вы используете давно устаревший класс HttpWebRequest, советую перейти на новый, созданный для этого класс HttpClient (об этом можете почитать в документации), а с ним вам и заголовки трогать даже не придется, лишь грамотное создание StringContent. – EvgeniyZ Mar 07 '20 at 14:22
  • @EvgeniyZ спасибо! Очень ценный для меня совет! – MaximK Mar 07 '20 at 14:42

0 Answers0