Получить строку JSON от сайта

308
23 июня 2021, 11:20

Хочу получить расписание с сайта https://rasp.dmami.ru/. При переходе по ссылке https://rasp.dmami.ru/?151-331 и дальнешем разборе страницы через встроенный инструмент браузера получается получить JSON строку. Но как получить эту JSON и записать ее в переменную через свою программу?

  static void Main(string[] args)
    {
        var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://rasp.dmami.ru/site/group?group=151-331&session=0");
        httpWebRequest.Accept = "/";
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = "GET";
        httpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 OPR/62.0.3331.116";
        httpWebRequest.Referer = "https://rasp.dmami.ru/?151-331";
        var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            var result = streamReader.ReadToEnd();
            Console.WriteLine(result.ToString());
        }
        Console.ReadLine();
    }
Answer 1

Сделал пару запросов. Пришел к выводу:

  1. Делаем запрос к https://rasp.dmami.ru/site/group?group=151-331&session=0 с Referer: https://rasp.dmami.ru/?151-331
  2. Далее в теле запроса идет установка кукиса, и далее перезагрузка страницы.
  3. При перезагрузке страницы получается в ответе json.

Логично, нужно сделать запрос к странице, далее забрать кукис, установить его, и загрузить страницу снова с Referer: https://rasp.dmami.ru/site/group?group=151-331&session=0.

Прилагаю код:

#region Usings
using System;
using System.Net;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
#endregion
public class Program
{
    private static readonly CookieContainer CookieContainer = new CookieContainer();
    public static async Task<int> Main()
    {
        using (HttpClientHandler handler = new HttpClientHandler
        {
            UseCookies = true,
            CookieContainer = CookieContainer
        })
        {
            using (HttpClient client = new HttpClient(handler))
            {
                client.DefaultRequestHeaders.Referrer = new Uri("https://rasp.dmami.ru/?151-331");
                using (HttpResponseMessage message =
                    await client.GetAsync("https://rasp.dmami.ru/site/group?group=151-331&session=0"))
                {
                    message.EnsureSuccessStatusCode();
                    Regex regex = new Regex("document.cookie=\\\"(?<CookieName>\\w+)\\=(?<CookieValue>.+?)\\;",
                        RegexOptions.Compiled);
                    Match cookieMatch = regex.Match(await message.Content.ReadAsStringAsync());
                    CookieContainer.Add(new Uri("https://rasp.dmami.ru/"),
                        new Cookie(cookieMatch.Groups["CookieName"].Value,
                            cookieMatch.Groups["CookieValue"].Value));
                    client.DefaultRequestHeaders.Referrer =
                        new Uri("https://rasp.dmami.ru/site/group?group=151-331&session=0");
                    using (HttpResponseMessage responseJsonMessage =
                        await client.GetAsync("https://rasp.dmami.ru/site/group?group=151-331&session=0"))
                    {
                        responseJsonMessage.EnsureSuccessStatusCode();
                        Console.WriteLine(await responseJsonMessage.Content.ReadAsStringAsync());
                    }
                }
            }
        }
        Console.ReadKey(true);
        return 0;
    }
}

Ответ:

READ ALSO
Интервал дат как параметр в SSRS

Интервал дат как параметр в SSRS

Имеется селект для отчета на MySQLОтчет буду публиковать на SRSS

194
Загрузка файлов с поддомена php

Загрузка файлов с поддомена php

Есть панель управления которая находится на поддомене dashboardsite

95
Скрипт для базы данных php

Скрипт для базы данных php

1) Есть база данных в ней есть поля id title foregin 2) в title перечислены отечественные машины и иностранные 3) иностранные машины записаны в таблице...

106
Viber сообщества. Отправка сообщений

Viber сообщества. Отправка сообщений

Есть необходимость автоматизировать для себя постинг записей на сайте, в группу вк, телеграмм

116