/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Project : WebQQCore
* Package : iqq.im.http
* File : QQCookieJar.java
* Author : solosky < solosky772@qq.com >
* Created : 2013-2-27
* License : Apache License 2.0
*/
package iqq.im.http;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.apache.log4j.Logger;
/**
* 保存和读取cookie
*
* @author solosky <solosky772@qq.com>
*
*/
public class QQHttpCookieJar {
private static final Logger LOG = Logger.getLogger(QQHttpCookieJar.class);
private List<QQHttpCookie> cookieContainer;
public QQHttpCookieJar(){
this.cookieContainer = new ArrayList<QQHttpCookie>();
}
public QQHttpCookie getCookie(String name, String url){
Iterator<QQHttpCookie> it = cookieContainer.iterator();
while(it.hasNext()) {
QQHttpCookie cookie = it.next();
if(cookie.getName().equals(name)) {
return cookie;
}
}
return null;
}
public void updateCookies(List<String> tmpCookies){
List<String> newCookies = new ArrayList<String>();
if(tmpCookies!=null){
newCookies.addAll(tmpCookies);
}
if(newCookies.size()>0) {
Iterator<String> nit = newCookies.iterator();
while(nit.hasNext()) {
QQHttpCookie cookie = new QQHttpCookie(nit.next());
QQHttpCookie oldCookie = this.getCookie(cookie.getName(), null);
//如果有之前相同名字的Cookie,删除之前的cookie
if(oldCookie!=null) {
cookieContainer.remove(oldCookie);
//如果新cookie的值不为空,就添加到新的cookie到列表中
if(cookie.getValue()!=null && cookie.getValue().length()>0) {
cookieContainer.add(cookie);
LOG.debug("[Update Cookie] "+cookie);
}
}else {
cookieContainer.add(cookie);
LOG.debug("[New Cookie] "+cookie);
}
}
}
}
public String getCookieHeader(String url){
URL u = null;
try {
u = new URL(url);
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
Iterator<QQHttpCookie> cit = cookieContainer.iterator();
StringBuffer buffer = new StringBuffer();
while(cit.hasNext()) {
QQHttpCookie cookie = cit.next();
if(cookie.getExpired()!=null && cookie.getExpired().before(new Date())) {
cit.remove(); //已经过期,删除
LOG.debug("[Removed Cookie] "+cookie);
}else if( /*url.getHost().endsWith(cookie.getDomain()) && */
u.getPath().startsWith(cookie.getPath())) {
buffer.append(cookie.getName());
buffer.append("=");
buffer.append(cookie.getValue());
buffer.append("; ");
}else {}
}
return buffer.toString();
}
}