Генерирую куки, но сайт не впускает
Ссылка - https://www.ambellahome.com/Product/Detail/811-00/Brittany-Arm-Chair
Генерирую куку, но она не проходит
string likn = WebUtility.UrlDecode(cait.QuerySelector("a").GetAttribute("href"));
string ost = likn.Substring(likn.IndexOf("Product/")).Replace("Product/", "");
string catrgory = ost.Substring(0, ost.IndexOf("/"));
string id = ost.Substring(ost.LastIndexOf("/") + 1);
string cookie_value = "\"id\":\"" + id + "\"," + "\"category\":\"" + catrgory + "\",\"type\":\"Category\",\"referer\":\"" + "https://www.ambellahome.com" + cait.QuerySelector("a").GetAttribute("href") + "\",\"queryString\":\"\"";
Console.WriteLine(cookie_value);
try
{
Program.cookieContainer.Add(Program.baseAddress, new Cookie("SEARCH_QUERY", cookie_value));
}
catch(Exception e)
{
}
Ответы (1 шт):
Вся ваша проблема в том, что в указанном вами коде попросту нету валидного JSON, ибо как минимум он должен начинаться с { и заканчиваться на }, а у вас простой набор символов. Перестаньте писать JSON руками, будьте ленивым программистом, за которого сделает все система!
За JSON в C# отвечают либо сторонние библиотеки (из популярных Newtonsoft.JSON), либо не так давно вышедшая System.Text.Json. Собственно, что тут выбирать я оставлю на вас, а чисто в этом примере качать лишнее бес толку.
Сначала давайте определимся что нам именно надо отправить, а для этого берем Postman и собираем в нем успешный запрос на сервер, добавив в него необходимые заголовки и Cookie. Как только мы это сделаем, получим такое:
Как видим, нам достаточно лишь отправить id и тип, а не всю портянку. Теперь значит мы можем сделать либо класс, либо что-то что будет лишь содержать в себе данные, тут отлично подойдут анонимные типы!
var data = new { id = "123", type = "Search" };
var json = JsonSerializer.Serialize(data);
И смотрите, всего 2 строки (а можно и в одну) и мы переписали полностью всю вашу белеберду и сделали код проще и удобней. Остается лишь отправить это все.
Так, как нам для работы с сайтом не нужны всякие контейнеры и прочее, то мы можем задать Cookie напрямую в заголовок, ну и получим в итоге переписанную всю вашу портянку кода в виде таких простых двух строк:
var data = new { id = "123", type = "Search" };
client.DefaultRequestHeaders.Add("Cookie", $"SEARCH_QUERY={JsonSerializer.Serialize(data)}");
Только не забудьте задать BaseAddress клиенту...
Пример онлайн
