@Zzombik

Почему HttpClient.GetAsync некорректно использует ссылку с символом «#»?

Я новичок в программировании.

По уроку на ютубе сделал парсер заголовков статей на сайте Хабрахабр.
Парсер корректно работает со ссылками https://habrahabr.ru/page1/ и далее 2, 3 страницы. Проходит по ним и берет все заголовки статей.

Я заменил ссылки на сайт Steam, чтобы парсер выбирал на его страницах названия предметов.
Успешно получаю результат в виде списка предметов, но с неправильной страницы. Если я верно понял, то ссылка на страницу "ломается" в GetAsync.

Кусочек кода
var currentUrl = url.Replace("{CurrentId}", id.ToString());
Process.Start(currentUrl);
var response = await client.GetAsync(currentUrl);

"currentUrl" - собранная ссылка страницы, с которой требуется взять названия предметов:
steamcommunity.com/market/search?appid=232090&q=em...
Она получается правильной. Также, как и ссылки на 2, 3 страницу и далее ("p1" в приведенной ссылке - это первая страница).
Я добавил Process.Start(ссылка), чтобы убедиться в этом. В браузере открывается именно то, что требуется.

Но результаты парсер берет с другой страницы:
steamcommunity.com/market/search?appid=232090&q=emote
(я проверил, вручную открыв ее в браузере и сравнив список предметов на ней с результатами парсера - они совпали)
т.е. ссылка в GetAsync словно обрубается на символе "#".

Я много времени гуглил эту проблему, но ничего не нашел.
Буду рад помимо ответа на сам вопрос, узнать, как мне надо было его искать.
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
lexxpavlov
@lexxpavlov
Программист, преподаватель
После символа # указывается локальный фрагмент (или якорь) страницы - элемент внутри страницы, который использует браузер для навигации по странице. Также используется для локальных (клиентских) настроек страницы.
В вашем случае, после # указан тип сортировки p1_name_asc - сортировать таблицу по имени по увеличению. Например, чтобы сортировать по уменьшению, можно поставить тип p1_name_desc.
Проблема в том, что сортировка происходит в браузере, а не на сервере (сервер вообще не увидит эту часть адреса).
Если нужно получить список именно так, как указано в ссылке, то вы тоже должны сортировать результат после получения списка.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@RidgeA
часть адресной строки после # как правило, веб-сервером, не обрабатывается и не должна передаваться на него вообще
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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