我有一个自托管的WCF服务,其endpoint设置为WebHttpBinding监听HTTP请求。我需要访问随这些请求传递的cookies。我可以获得Cookie:
头值,但我仍然需要进行实际的解析。我的实现尝试是使用CookieContainer
:
var container = new CookieContainer();
var uri = new Uri("http://localhost/");
container.SetCookies(uri, cookieHeader);
var cookies = container.GetCookies(uri).OfType<Cookie>();
foreach (var cookie in cookies)
{
Console.WriteLine("{0} = {1}", cookie.Name, cookie.Value);
}
此代码的问题在于CookieContainer
希望Cookie用逗号分隔(cookieHeader=“c1=v1,c2=v2”
),而浏览器倾向于使用分号(cookieHeader=“c1=v1;c2=v2”
)。由于RFC6265只允许使用分号作为分隔符(尽管旧的RFC同时允许使用分号和分号),我有点困惑为什么CookieContainer
只支持逗号。现在,我正在努力寻找一个替代方案来解决这个看起来很典型的问题。如何正确解析cookies?ASP。NET应该能够做到这一点,它是否为此公开了任何公开可用的类?
###为什么不管用?
据我所知,Set Cookie:
和Cookie:
头的分隔符各不相同<如果存在多个标头,则代码>设置Cookie:通常是重复的,而Cookie:
在单个标头中有多个Cookie。从RFC6265:
== Server -> User Agent ==
Set-Cookie: SID=31d4d96e407aad42; Path=/; Secure; HttpOnly
Set-Cookie: lang=en-US; Path=/; Domain=example.com
== User Agent -> Server ==
Cookie: SID=31d4d96e407aad42; lang=en-US
Set-Cookie:
标头可以通过将每个标头附加一个逗号来组合成一个字符串:
Set-Cookie: SID=31d4d96e407aad42; Path=/; Secure; HttpOnly,lang=en-US; Path=/; Domain=example.com
CookieContainer
设计用于客户端(由用户代理),因此SetCookies(Uri,string)
方法仅解析setcookie:
使用的语法。
###ASP. Net是怎么做到的
ASP。Net使用一个内部方法来解析Cookie:
头,并且它似乎没有被任何公共方法公开。请参阅HttpListenerRequest。Cookies:
private CookieCollection ParseCookies(Uri uri, string setCookieHeader) {
GlobalLog.Print("HttpListenerRequest#" + ValidationHelper.HashString(this) + "::ParseCookies() uri:" + uri + " setCookieHeader:" + setCookieHeader);
CookieCollection cookies = new CookieCollection();
CookieParser parser = new CookieParser(setCookieHeader);
for (;;) {
Cookie cookie = parser.GetServer();
GlobalLog.Print("HttpListenerRequest#" + ValidationHelper.HashString(this) + "::ParseCookies() CookieParser returned cookie:" + ValidationHelper.ToString(cookie));
if (cookie==null) {
// EOF, done.
break;
}
if (cookie.Name.Length==0) {
continue;
}
cookies.InternalAdd(cookie, true);
}
return cookies;
}
###那么,我如何解析标题呢?
Nancy有一个非常简洁的解析器,如果许可证允许,可以使用它:
private IDictionary<string, string> GetCookieData()
{
var cookieDictionary = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
if (!this.Headers.Cookie.Any())
{
return cookieDictionary;
}
var values = this.Headers["cookie"].First().TrimEnd(';').Split(';');
foreach (var parts in values.Select(c => c.Split(new[] { '=' }, 2)))
{
var cookieName = parts[0].Trim();
string cookieValue;
if (parts.Length == 1)
{
//Cookie attribute
cookieValue = string.Empty;
}
else
{
cookieValue = parts[1];
}
cookieDictionary[cookieName] = cookieValue;
}
return cookieDictionary;
}
plugins/kibana/public/dashboard/index.js 结构跟 visualize 类似,设置两个调用 savedDashboards.get() 方法的 routes,提供一个叫 dashboard-app 的 directive。 savedDashboards 由 plugins/kibana/public/dashboard/services/saved_dash
index.js 中,首要当然是注册自己。此外,还加载两部分功能:plugins/kibana/visualize/editor/* 和 plugins/kibana/visualize/wizard/wizard.js。然后定义了一个 route,默认跳转 /visualize 到 /visualize/step/1。 editor editor.js 中也定义了两个 route,分别是 /vi
前文已经说到,kibana.js 中依次加载了各主要功能模块的入口。比如搜索页是 src/core_plugins/kibana/public/discover/index.js。通过这个文件路径就可以猜到,有关搜索页的功能,代码应该都在 src/core_plugins/kibana/public/discover/ 里了。这个目录下的文件有: _hit_sort_fn.js component
词法解析、语法解析 这一节我们分析下PHP的解析阶段,即 PHP代码->抽象语法树(AST) 的过程。 PHP使用re2c、bison完成这个阶段的工作: re2c: 词法分析器,将输入分割为一个个有意义的词块,称为token bison: 语法分析器,确定词法分析器分割出的token是如何彼此关联的 例如: $a = 2 + 3; 词法分析器将上面的语句分解为这些token:$a、=、2、+、3
问题内容: 我正在创建一个复杂的JavaScript库,用于与公司的服务器端框架一起使用。 服务器端框架将其数据编码为简单的XML格式。没有花哨的命名空间或类似的东西。 理想情况下,我想将浏览器中的所有数据解析为JSON。但是,如果这样做,我需要重写一些服务器端代码以吐出JSON。这很痛苦,因为我们拥有无法轻易更改的公共API。 我真正关心的是浏览器中解析JSON和XML的性能。真的有很大的区别要
问题内容: 我有如下所示的HTML内容。我在这里寻找的标签是和。Java是否提供任何HTML解析技术? 问题答案: String value = Jsoup.parse(new File(“d:\1.html”), “UTF-8”).select(“img”).attr(“src”); System.out.println(value); //http://socialimg04.rediff.c