Httpclient是一个很方便地http客户端,本身支持自动重定向功能。但是由于在做一些认证网站时重定向页面很可能会进行一些cookie的设置。
比如163邮箱中跳转时就在重定向页面设置Coremail的值,而3.1版本存在一个缺陷。就是无法将重定向页面中的cookie值追加到当前cookie中。
我对源代码进行了修改,解决了此问题。希望帮忙遇到此问题的朋友。
下载commons-httpclient-3.1-src.zip,然后编辑 HttpMethodDirector.java 文件的 processRedirectResponse 方法。
以下是我的修改:
比如163邮箱中跳转时就在重定向页面设置Coremail的值,而3.1版本存在一个缺陷。就是无法将重定向页面中的cookie值追加到当前cookie中。
我对源代码进行了修改,解决了此问题。希望帮忙遇到此问题的朋友。
下载commons-httpclient-3.1-src.zip,然后编辑 HttpMethodDirector.java 文件的 processRedirectResponse 方法。
以下是我的修改:
private boolean processRedirectResponse(final HttpMethod method)
throws RedirectException {
//wcy set cookie start
Header newCookieHeader = method.getResponseHeader("Set-Cookie");
Header currentCookieHeader = method.getRequestHeader("Cookie");
if(newCookieHeader!=null){
if(currentCookieHeader==null){
method.setRequestHeader("Cookie", newCookieHeader.getValue());
}else{
method.setRequestHeader("Cookie", currentCookieHeader.getValue()+"; "+newCookieHeader.getValue());
}
}
//wcy set cookie over
}
throws RedirectException {
//wcy set cookie start
Header newCookieHeader = method.getResponseHeader("Set-Cookie");
Header currentCookieHeader = method.getRequestHeader("Cookie");
if(newCookieHeader!=null){
if(currentCookieHeader==null){
method.setRequestHeader("Cookie", newCookieHeader.getValue());
}else{
method.setRequestHeader("Cookie", currentCookieHeader.getValue()+"; "+newCookieHeader.getValue());
}
}
//wcy set cookie over
}