System.Net.CookieContainer в project.Profile.CookieContainer

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 785
Благодарностей
2 444
Баллы
113
Как бы так с наименьшими усилиями конвертнуть System.Net.CookieContainer в project.Profile.CookieContainer (потом выполнить нужную работу), после чего конвертнуть в обратную сторону?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
а просто преобразованием типов не пробовал?
 
  • Спасибо
Реакции: BAZAg
Регистрация
05.06.2019
Сообщения
570
Благодарностей
454
Баллы
63
Как бы так с наименьшими усилиями конвертнуть System.Net.CookieContainer в project.Profile.CookieContainer (потом выполнить нужную работу), после чего конвертнуть в обратную сторону?
тут, посмотрите, в одну сторону показал как
 
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 785
Благодарностей
2 444
Баллы
113
а просто преобразованием типов не пробовал?
Спасибо. Нет не пробовал - познаний нехватает, можешь набросать пример?
А то единственное что приходит в голову - это вынимать все куки по доменам, потом заливать их в контейнер Зенно и потом эту же операцию обратно. Но, боюсь что из-за таких моих манипуляций что-то да потеряется...

тут, посмотрите, в одну сторону показал как
Тему пролистал, видимо не внимательно, посмотрю внимательнее. Спасибо!
 
Регистрация
05.06.2019
Сообщения
570
Благодарностей
454
Баллы
63
77297


C#:
var cookieContainer = httpClient.HttpHandler.CookieContainer.GetCookies(new Uri("https://"));

    //2.1 Export to zpprofile
    foreach (Cookie item in cookieContainer) {
        var cookie = project.Profile.CookieContainer.Create(
            item.Domain,
            item.Path,
            item.Name,
            item.Value,
            item.Expires,
            item.Secure,
            item.HttpOnly,
            item.Discard,
            "Unspecified Medium",
            null
        );
        
        project.Profile.CookieContainer.Add(cookie);
    }
    
    //2.2. Export to string
    //var cookie = new StringBuilder();
    //foreach (Cookie item in cookieContainer) {
    //    cookie.Append($"{item.Name}={item.Value}; ");
    //}
 
  • Спасибо
Реакции: BAZAg

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 785
Благодарностей
2 444
Баллы
113
Посмотреть вложение 77297

C#:
var cookieContainer = httpClient.HttpHandler.CookieContainer.GetCookies(new Uri("https://"));
    //2.1 Export to zpprofile
    foreach (Cookie item in cookieContainer) {
        var cookie = project.Profile.CookieContainer.Create(
            item.Domain,
            item.Path,
            item.Name,
            item.Value,
            item.Expires,
            item.Secure,
            item.HttpOnly,
            item.Discard,
            "Unspecified Medium",
            null
        );
   
        project.Profile.CookieContainer.Add(cookie);
    }

    //2.2. Export to string
    //var cookie = new StringBuilder();
    //foreach (Cookie item in cookieContainer) {
    //    cookie.Append($"{item.Name}={item.Value}; ");
    //}
Спасибо. Вытащил этот код из шаблона из данной темы!
Но... Я не знаю сайтов, для которых мне нужны куки.
Я уже присматривался к примерно такому коду:

C#:
System.Net.CookieContainer сс = new System.Net.CookieContainer();
// ----- где-то тут запросы получающие нужные куки...

Hashtable table = (Hashtable) cc.GetType().InvokeMember( "m_domainTable", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance, null, cc, new object[] { });

foreach(var key in table.Keys) {
  var item = table[key];
  var items = (ICollection)item.GetType().GetProperty("Values").GetGetMethod().Invoke(item, null);
  foreach(CookieCollection ccc in items) {
    foreach(Cookie item1 in ccc) {
      var cookie = project.Profile.CookieContainer.Create(
      item1.Domain,
      item1.Path,
      item1.Name,
      item1.Value,
      item1.Expires,
      item1.Secure,
      item1.HttpOnly,
      item1.Discard,
      "Unspecified Medium", // ??? Unspecified Medium - за что отвечает - что это?
      null // // ??? Unspecified Medium - за что отвечает - что это?
);
        project.Profile.CookieContainer.Add(cookie);
    }
  }
}
У меня связка такая, что одну часть работы делает Зенно, другую - другой софт. (итого контейнеры разные...)
Взаимодействие между ними в виде строк base64.

Я думал найти что-то типа сериализации (как тут https://metanit.com/sharp/tutorial/6.2.php ) - мол в Зенно работу сделал, конвертировал в System.Net.CookieContainer, сериализировал в байты, конвертировал в base64, отправил запрос в базу.
А на другой стороне осталось бы просто десериализацию провести и у меня в кармане был бы сразу готовый объект System.Net.CookieContainer с которым и выполняется работа, и потом в обратную сторону просто сериализовал в байты, байты в base64 - а на другой стороне Зенной уже получил объект System.Net.CookieContainer, который хотелось бы легко перевести в project.Profile.CookieContainer...

Такой финт раньше делал с project.Profile.CookieContainer.Import project.Profile.CookieContainer.Export - вроде не плохо получалось... А тут разные типы, которые как-то свести в один надо (и видимо придётся наполнять кукиконтейнер перебором, если другого варианта не найдется)...

хватает. Такое делал 100%
Делал, это точно, но как это должно срабатывать с разными этими контейнерами хз, из-за чего даже побоялся пробовать...
 
Последнее редактирование:
  • Спасибо
Реакции: djaga
Регистрация
05.06.2019
Сообщения
570
Благодарностей
454
Баллы
63
"Unspecified Medium", // ??? Unspecified Medium - за что отвечает - что это?
null // // ??? Unspecified Medium - за что отвечает - что это?
Ответ на вопрос

Боевой пример
C#:
var cookieContainer = new System.Net.CookieContainer();
var httpClientHandler = new HttpClientHandler()
{
    CookieContainer = cookieContainer,
    UseCookies = true              
};

string result = null;

using(var httpClient = new HttpClient(httpClientHandler))
{
    var responseTask = httpClient.GetAsync("http://google.com");
    result = responseTask.Result.Content.ReadAsStringAsync().Result;
}

Hashtable table = (Hashtable) cookieContainer.GetType().InvokeMember( "m_domainTable", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance, null, cookieContainer, new object[] { });

foreach(var key in table.Keys) {
  var item = table[key];
  var items = (ICollection)item.GetType().GetProperty("Values").GetGetMethod().Invoke(item, null);
  foreach(System.Net.CookieCollection ccc in items) {
    foreach(System.Net.Cookie item1 in ccc) {
      var cookie = project.Profile.CookieContainer.Create(
          item1.Domain,
          item1.Path,
          item1.Name,
          item1.Value,
          item1.Expires,
          item1.Secure,
          item1.HttpOnly,
          item1.Discard,
          "Unspecified Medium",
          null
        );
        project.Profile.CookieContainer.Add(cookie);
    }
  }
}

return result;
 
  • Спасибо
Реакции: SHILY, djaga и BAZAg

Кто просматривает тему: (Всего: 3, Пользователи: 0, Гости: 3)