COOKIE的处理

session的保持是通过cookie来维持的,所以如果用户有勾选X天免登陆,这个session就X天内一直有效,就是通过这个cookie来维持。
如果没有选中x天免登陆,基本上就是本次才能保持session,下次打开浏览器就要重新登陆了。所以在web安全里,黑客通过XSS,最终目的就是获取cookie,从免登陆直接进入系统
这次要讲的是得到用户cookie后,免登陆,用httpclient保持原来session访问原本一定要登陆才能做的事情。 本文目的是,得到用户cookie后,免登陆,用httpclient保持原来session访问原本一定要登陆才能做的事情
HttpClient 4.x库可以自己处理Cookie
有两种方法来添加cookie
通过httpclient.setCookieStore(cookieStore)
通过httpGet或者httpPost的addHeader(new BasicHeader("Cookie",cookie));

第一种方法

httpClient是否在下次请求中携带从服务器请求带来的Cookie,完全是有设置决定的。
httpclient.getParams.setParameter(ClientPNames.COOKIE_POLICY,CookiePolicy.BEST_MATCH或者CookiePolicy.BROWSER_COMPATIBILITY。如果设置为Cookie策略为BEST_MATCH,或者BROWER_COMPATIBILITY的话,HttpClient会在请求中携带有服务器返回的Cookie。
如果不设置,应该需要手动添加CookieStore,才会保持session.
如果设置为Cookie策略为默认的话,没设置,则需要手动通过httpclient.setCookieStore(cookieStore)去设置。
note: 如果用的是同一个HttpClient(上下两个请求用同一个httpclient对象。
且没去手动连接释放掉client.getConnectionManager().shutdown();)!
都不用去设置cookie的ClientPNames.COOKIE_POLICY。httpClient都是会保留cookie的! void main(){
CookieStore cookieStore = new BasicCookieStore();
//---将cookie设置到httpclient中---//
CloseableHttpClient HttpClient = HttpClients.custom().setDefaultCookieStore(cookieStore).build();
try{
HttpPost post = new HttpPost(”http://www.baidu.com");
BasicClientCookie cookie = new BasicClientCookie("name","zhaoke");
cookie.setVersion(0);
cookie.setPath("/");
cookie.setDomain("www.baidu.com");//设置范围
cookeStore.addCookie(cookie); httpClient.execute(post);
List<Cookie> cookies = cookieStore.getCookies();
for(Cookie cook: cookies){
System.out.println("Local cookie:"+cookies.get(i));
}
}catch(Exception e){
e.printStackTrace();
}finally{
httpClient.close();
}
}

第二种方法

通过Header去设置cookie
我们首先要得到一个登陆的cookie,免登陆访问,可以用浏览器登陆,然后F12通过console执行document.cookie得到cookie
用这个cookie,在访问的时候,设置httpGet或者httpPost的addHeader(new BasicHeader("Cookie",cookie));就可以免登陆访问

COOKIE自定义

实际使用中client的过程中,会遇到一种情况,如cookie的key为空的,此时默认的cookie的策略处理cookie是会报错的。
这是可以通过重写cookiestore策略来解决
private static void setCustomCookieSpec(HttpClientBuilder builder){
CookieSpecProvider easySpecProvider = new CookieSpecProvider(){
public org.apache.http.cookie.CookeSpec create(HttpContext context){
return new BrowserCompatSpec(){
public void validate(Cookie cookie,CookieOrigin prigin) throws Exeption{ } protected List<Cookie> parse(final HeaderElement[] elems,final CookieOrigin origin) throw Exception{
final List<Cookie> cookies = new ArrayList<cookie>(elems.length);
for(final HeaderElement headerelement: elems){
String name = headerelement.getName();
String value = headerelement.getValue();
}
if(value==null){ continue; }
if(name==null || name.length()==0){ throw new MalformedCookieException("Cookie name may not be empty"); }
final BasicClientCookie cookie = new BasicClientCookie(name,value);
cookie.setPath(getDefaultPath(origin));
cookie.setDomain(getDefaultDomain(origin));
// cycle through the paramters
final NameValuePair attribs = headerelement.getParameter();
for(int j=attribute.length-1;j>=0;j--){
final NameValuePair attrib = attribs[j];
final String s = attrib.getName().toLowerCase(Locale.ENGLISH);
cookie.setAttribute(s,attrib.getValue());
final CookieAttributeHandler handler = findAttribHandler(s);
if(handler!=null){ handler.parse(cookie,attrib.getValue()); }
}
cookies.add(cookie);
}
}
return cookies;
}
};
} Registry<CookieSpecProvider> r = RegistryBuilder
.<CookieSpecProvider> create()
.register(CookieSpecs.BEST_MATCH, new BestMatchSpecFactory())
.register(CookieSpecs.BROWSER_COMPATIBILITY, new BrowserCompatSpecFactory())
.register("easy", easySpecProvider).build();
builder.setDefaultCookieSpecRegistry(r);

httpclient cookie使用介绍的更多相关文章

  1. httpclient cookie相关介绍

    http状态管理 cookie是HTTP代理和目标服务器可以交流保持回话的状态信息的令牌或短包. httpclient使用Cookie接口来代表抽象的cookie令牌,在它的简单形式中http的coo ...

  2. Android HttpClient HttpURLConnection相关介绍

    Android HttpClient HttpURLConnection相关介绍 遇到一个问题 在android studio上用HttpClient编写网络访问代码的时候,发现该类无法导入并使用.. ...

  3. JMeter 配置元件之HTTP Cookie Manager 介绍

    配置元件之HTTP Cookie Manager 介绍   by:授客 QQ:1033553122 测试环境 apache-jmeter-2.13 1.   Cookie管理器介绍 Cookie Ma ...

  4. Session&Cookie 的介绍和使用

    Session介绍与使用 1.Session基本介绍 Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序 ...

  5. 转:Http协议中Cookie详细介绍

    Http协议中Cookie详细介绍 Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了, ...

  6. java httpclient cookie

    BasicCookieStore cookieStore = new BasicCookieStore();BasicClientCookie cookie = new BasicClientCook ...

  7. C# HttpClient Cookie验证解决方法

    自实现的cookie 验证,远程取值的例子 以下代码配合HttpClient使用可以实现跨域(cookie的读写) //验证 复制代码 代码如下: HttpClient httpClient = ne ...

  8. HTTPclient cookie的获取与设置

    因为代码与Java用apache的HttpClient发送Post请求大部份重复,所以就不贴整段代码了,只把不同的地方贴出来.发送Cookie就必须先得到Cookie,所以至少发送两次请求,第一次用于 ...

  9. localStorage , sessionStorage ,cookie 使用介绍

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. 利用.bat(批处理)来删除KEIL编译生成的无用文件

    新建一个.txt文件. 在里面输入如下内容: del *.bak /s del *.ddk /s del *.edk /s del *.lst /s del *.lnp /s del *.mpf /s ...

  2. 在一个activity中销毁指定activity

    通过静态变量的方法: 1.在Aactivity中设置一个Activity静态变量 static Activity activity; 2.在onCreate中: activity=this: 3.在B ...

  3. C# 将 Stream 写入文件

    public void StreamToFile(Stream stream,string fileName) { // 把 Stream 转换成 byte[] byte[] bytes = new ...

  4. 奖券数目|2015年蓝桥杯B组题解析第一题-fishers

    奖券数目 有些人很迷信数字,比如带"4"的数字,认为和"死"谐音,就觉得不吉利. 虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位 ...

  5. js中this关键字的使用

    <script> //题目一:理解r1与r2的输出 function addFactory(){ var adder = 5; return function(data){ adder + ...

  6. 新增html5标签 例如input的很多属性

    <meter> 标签定义度量衡.仅用于已知最大和最小值的度量. contenteditable="true"> 规定可编辑的内容. <output> ...

  7. 瞎折腾之Webhooks

    之前听学长介绍过webhooks,也知道有这个东西,但没有真正的用于项目部署,长久以来一直过着“刀耕火种”的生活......长久以来,都是这么更新代码的: 由于之前做的项目刚刚上线,需要对其进行持续的 ...

  8. The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 解决方法

    项目忽然出现 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Pat ...

  9. miRNA几大常用的数据库

    1.miRbasehttp://www.mirbase.org/2.miRDBhttp://www.mirdb.org/miRDB/policy.html3.miRandahttp://www.mic ...

  10. [原][osg][osgEarth][粒子特效]关于粒子特效库在osgEarth中,位置摆放问题,跟踪节点移动问题

    首先粒子在地球上位置摆放很简单: //传入的经纬度坐标 osg::Vec3d geoPoint; const SpatialReference* latLong = SpatialReference: ...