读书人

httpclient 4.1.2-GA 出现invalid coo

发布时间: 2012-08-09 15:59:21 作者: rapoo

httpclient 4.1.2-GA 出现invalid cookie header 的解决办法
最近在使用httpcomponent-client-4.1.2时,遇到如下错误:
client.getParams().setParameter(CookieSpecPNames.DATE_PATTERNS,Arrays.asList("EEE, dd-MMM-yyyy HH:mm:ss z"));
怀疑在别处做了其他处理,单步观察入参与回复中中给出demo的不同,意外发现在org.apache.http.impl.cookie.DateUtils#parseDate(String dateValue,String[] dateFormats,Date)方法入参的第一个String入参包含两个双引号。往下走,看到如下代码:

        if (dateValue.length() > 1                && dateValue.startsWith("'")                && dateValue.endsWith("'"))        {            dateValue = dateValue.substring (1, dateValue.length() - 1);        }

到这应该可以肯定问题的所在了,httpclient只处理单引号,并未对双引号做处理。对代码作如下更改
        if (dateValue.length() > 1            && ((dateValue.startsWith("'")            && dateValue.endsWith("'"))            || (dateValue.startsWith("\"")            && dateValue.endsWith("\"")))        )        {            dateValue = dateValue.substring (1, dateValue.length() - 1);        }

重新打包,问题解决。
后记:出现这个问题是由一些web server在生成setcookie响应头时没按照规范来做造成的。
httpclient4.2.0在遇到这样的setcookie头应该也有这个问题。
4.2.0-dev版本中的代码依旧没做修改

读书人网 >开源软件

热点推荐