反射は、CookieContainerオブジェクト内のすべてのドメインキーを保持しているプライベートフィールドを取得するために使用することができ、私はそのプライベートフィールドの名前を得たどうすればよい
Q.?
Ans。リフレクターを使用する。
そのは次のように宣言されています。私たちはプライベートフィールドを得れば、私たちは、ドメインキーを取得します、そしてクッキーを取得することは、単純な反復である
private Hashtable m_domainTable;
。
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の両方のCookieが取得されます。 –
コンソール印刷ループに 'string.Format(" http:// 'があります.' GetCookies'メソッドは、httpだけで始まるドメイン名を使用して呼び出されます。 – user1713059