[HtmlParser]bug提交(含解决方案)--A bug when set cookies
htmlParser在设置cookies时存在bug,对于相同的domain,不能设置多个cookies.下面时偶提交的bug内容及解决办法.偶英语很烂--大家别笑话.:P
There can't set many cookies to a domain,for example:
public void testSetCookies() throws Exception
{
String urlString
= "http://sourceforge.net/projects/htmlparser";
Parser parser = this.buildParser(urlString);


}
private Parser buildParser(String urlString) throws
Exception
{
ConnectionManager manager =
Parser.getConnectionManager ();
Cookie cookie = new Cookie ("name1", "value1");
manager.setCookie (cookie, "sourceforge.net");
cookie = new Cookie ("name2", "value2");
manager.setCookie (cookie, "sourceforge.net");
return new Parser(urlString);
}
{
String urlString
= "http://sourceforge.net/projects/htmlparser";
Parser parser = this.buildParser(urlString);


}
private Parser buildParser(String urlString) throws
Exception
{
ConnectionManager manager =
Parser.getConnectionManager ();
Cookie cookie = new Cookie ("name1", "value1");
manager.setCookie (cookie, "sourceforge.net");
cookie = new Cookie ("name2", "value2");
manager.setCookie (cookie, "sourceforge.net");
return new Parser(urlString);
}
only the first cookie was set to the
domain "sourceforge.net".
This bug comes with the
method:ConnectionManager.setCookie (Cookie cookie,
String domain),there can't add a new cookie to a exist
domain.
It is ok if repleace the method with under codes :
public void setCookie (Cookie cookie, String domain)
{
String path;
Vector cookies;
Cookie probe;
if (null != cookie.getDomain ())
domain = cookie.getDomain ();
path = cookie.getPath ();
if (null == mCookieJar)
mCookieJar = new Hashtable (); // turn on
cookie processing
cookies = (Vector)mCookieJar.get (domain);
if (null != cookies)
{
boolean isNewCookie = true;
for (int j = 0; j < cookies.size (); j++)
{
probe = (Cookie)cookies.elementAt (j);
if (probe.getName ().equalsIgnoreCase
(cookie.getName ()))
{
if(isNewCookie == true) isNewCookie =
false;
// we keep paths sorted most specific to
least
if (probe.getPath ().equals (path))
{
cookies.setElementAt (cookie, j); //
replace
break;
}
else if (path.startsWith (probe.getPath ()))
{
cookies.insertElementAt (cookie, j);
break;
}
}
}
if(isNewCookie == true)
{
cookies.addElement(cookie);
}
}
else
{ // new cookie list needed
cookies = new Vector ();
cookies.addElement (cookie);
mCookieJar.put (domain, cookies);
}
}
{
String path;
Vector cookies;
Cookie probe;
if (null != cookie.getDomain ())
domain = cookie.getDomain ();
path = cookie.getPath ();
if (null == mCookieJar)
mCookieJar = new Hashtable (); // turn on
cookie processing
cookies = (Vector)mCookieJar.get (domain);
if (null != cookies)
{
boolean isNewCookie = true;
for (int j = 0; j < cookies.size (); j++)
{
probe = (Cookie)cookies.elementAt (j);
if (probe.getName ().equalsIgnoreCase
(cookie.getName ()))
{
if(isNewCookie == true) isNewCookie =
false;
// we keep paths sorted most specific to
least
if (probe.getPath ().equals (path))
{
cookies.setElementAt (cookie, j); //
replace
break;
}
else if (path.startsWith (probe.getPath ()))
{
cookies.insertElementAt (cookie, j);
break;
}
}
}
if(isNewCookie == true)
{
cookies.addElement(cookie);
}
}
else
{ // new cookie list needed
cookies = new Vector ();
cookies.addElement (cookie);
mCookieJar.put (domain, cookies);
}
}
版权所有,欢迎转载
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义