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版本中的代码依旧没做修改