반사, CookieContainer 개체의 모든 도메인 키를 보유하고있는 개인 필드를 가져올 수 있습니다 내가 그 개인 필드의 이름을 가지고 어떻게
Q.?
Ans. 리플렉터 사용하기.
그것으로 선언한다 : 우리는 개인 필드를 일단
private Hashtable m_domainTable;
, 우리는 도메인 키를 얻을 것이다, 다음 쿠키를 얻는 것은 단순 반복이다. 당신이 NUnit과 테스트를 작성한다면
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Net;
using System.Collections;
namespace ConsoleApplication4
{
static class Program
{
private static void Main()
{
CookieContainer cookies = new CookieContainer();
cookies.Add(new Cookie("name1", "value1", "/", "domain1.com"));
cookies.Add(new Cookie("name2", "value2", "/", "domain2.com"));
Hashtable table = (Hashtable) cookies.GetType().InvokeMember("m_domainTable",
BindingFlags.NonPublic |
BindingFlags.GetField |
BindingFlags.Instance,
null,
cookies,
new object[] { });
foreach (var key in table.Keys)
{
foreach (Cookie cookie in cookies.GetCookies(new Uri(string.Format("http://{0}/", key))))
{
Console.WriteLine("Name = {0} ; Value = {1} ; Domain = {2}", cookie.Name, cookie.Value,
cookie.Domain);
}
}
Console.Read();
}
}
}
이 방법은 http 프로토콜을 사용하는 것으로 보이며 https 용으로 생성 된 쿠키는 표시되지 않습니다. – user1713059
@ user1713059 - HTTP에서만이 작업을 수행하고 있음을 보여주는 위치는 어디입니까? 어쨌든 이 경우 http + https에 대한 쿠키가 생성됩니다. –
콘솔 출력 루프에는'string.Format ("http : //')가 있습니다 .GetCookies 메소드는 http로 시작하는 도메인 이름을 사용하여 호출됩니다 – user1713059