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. UVa 10285 Longest Run on a Snowboard - 记忆化搜索

    记忆化搜索,完事... Code /** * UVa * Problem#10285 * Accepted * Time:0ms */ #include<iostream> #includ ...

  2. P4303 [AHOI2006]基因匹配 未完成

    题目 luogu 暴力60pts部分 显然如果没有出现次数==5的条件 显然是\(N_{2}\)的求lcs的模板 但是加点条件就完全不同了 思路 这个题短小精悍,不想数据结构那么傻逼无脑 我们考虑一下 ...

  3. POJ 1236 Network of Schools(tarjan)题解

    题意:一个有向图.第一问:最少给几个点信息能让所有点都收到信息.第二问:最少加几个边能实现在任意点放信息就能传遍所有点 思路:把所有强连通分量缩成一点,然后判断各个点的入度和出度 tarjan算法:问 ...

  4. 获取CheckBox的值

    前台获取 function chkCheckBox() { var code_arr = new Array(); //定义一数组 $('.C_B').each(function () { if ($ ...

  5. python tar 压缩解压

    压缩: 1. import tarfile import os def tar(fname): t = tarfile.open(fname + ".tar.gz", " ...

  6. Oracle学习笔记(二)——临时表

    在针对大数据量的多表级联查询或复杂事务处理的时候,引入Oracle临时表是一种不错的策略.因此,在解决实际需求时经常会遇到需要使用存储过程和临时表相互配合的情况.下面就Oracle如何创建临时表以及注 ...

  7. Codeforces 834C - The Meaningless Game

    834C - The Meaningless Game 数学. 思路1:判断a•b能不能化成v3且a%v==0且b%v==0.v可以直接用pow求(或者用cbrt),也可以二分求:还可以用map映射预 ...

  8. 移动端视频h5表现问题汇总

    1. 同屏播放视频 <video src="" x-webkit-airplay="true" webkit-playsinline="true ...

  9. Unity 4.x 资源加载

    using UnityEngine; using System.Collections; using System.IO; public class LoadResource : MonoBehavi ...

  10. Rspec: everyday-rspec实操。5:controller test(了解基础)

    第 5 章 控制器测试 5.1基础 rails generate rspec:controller home RSpec.describe HomeController, type: :control ...