Генерирую куки, но сайт не впускает

Ссылка - 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 шт):

Автор решения: EvgeniyZ

Вся ваша проблема в том, что в указанном вами коде попросту нету валидного JSON, ибо как минимум он должен начинаться с { и заканчиваться на }, а у вас простой набор символов. Перестаньте писать JSON руками, будьте ленивым программистом, за которого сделает все система!

За JSON в C# отвечают либо сторонние библиотеки (из популярных Newtonsoft.JSON), либо не так давно вышедшая System.Text.Json. Собственно, что тут выбирать я оставлю на вас, а чисто в этом примере качать лишнее бес толку.

Сначала давайте определимся что нам именно надо отправить, а для этого берем Postman и собираем в нем успешный запрос на сервер, добавив в него необходимые заголовки и Cookie. Как только мы это сделаем, получим такое:

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 клиенту...

Пример онлайн

→ Ссылка