Получить последний uri после Get запроса
Я при помощи парсинга хочу получить все товары из интернет-магазина Розетка по определённой строке. Допустим, я хочу получить гречку, тогда я через HttpClient делаю запрос
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("https://rozetka.com.ua/search/?text=гречка");
Но если делать это через браузер, то нас перенаправляет на этот uri: https://rozetka.com.ua/krupy/c4628397/vid-225787=grechka/#search_text=%D0%B3%D1%80%D0%B5%D1%87%D0%BA%D0%B0
Именно этот uri, на который розетка перенаправляет мне и нужно получить
Ответы (1 шт):
Вы не очень хороший пример взяли, ибо там не простой редирект.
Если отвечать на ваш вопрос, то последний адрес всегда находится в:
response.RequestMessage.RequestUri //https://rozetka.com.ua/ua/search/?text=гречка
Почему это не то, что ожидалось и как получить нужное?
Для этого, давайте проследим за тем, как общается браузер с сервером и какие запросы отправляются:
Как видите, при заходе на сайт, он сразу перенаправляет нас на https://rozetka.com.ua/ua/search/?text=гречка и это для сайта конечный результат, больше он не перенаправляет. Ок, но от куда ссылка? Смотрим запросы дальше:
Тут мы сразу видим, что сайт использует API и подгружает все в некий фрейм, а ссылку он берет из https://search.rozetka.com.ua/ua/search/api/v4/?front-type=xl&text=гречка&lang=ua
{
"data": {
"quantities": null,
"pagination": null,
"options": [],
"filters": [],
"conditions": null,
"chosen": [],
"related_options": null,
"meta": {
"result_info": null,
"h1": "",
"title": "",
"keywords": "",
"description": "",
"navigateTo": {
"fragment": {
"search_text": "гречка"
},
"fragment_raw": "search_text=%D0%B3%D1%80%D0%B5%D1%87%D0%BA%D0%B0",
"host": "rozetka.com.ua",
"path": "/ua/krupy/c4628397/vid-225787=grechka/",
"query": [],
"query_raw": null,
"scheme": "https",
"url": "https://rozetka.com.ua/ua/krupy/c4628397/vid-225787=grechka/#search_text=гречка",
"url_api": ""
}
},
"categories": null,
"goods": null
}
}
Ну и при помощи JS уже идет подмена адреса в адресной строке, но не редиректом.
Так что, если хотите именно нужную ссылку, то отправляйте запрос на API адрес, а уже от туда вытаскивайте ссылку (десериализация JSON).

