HttpClient 4.0 保持登录session 访问网页

session的保持是通过cookie来维持的,所以如果用户有勾选X天内免登录,这个session就X天内一直有效,就是通过这个cookie来维护。如果没选X天内免登录,基本上就本次才能保持session,下次打开浏览器就要重新登录了。

所以在web安全里,黑客通过XSS,最终目的就是获取cookie,从免登录直接进入系统。

这次要讲的是,得到用户cookie后,免登录,用HttpClient保持原来session访问原本一定要登录才能做的事。

HttpClient4.x库可以自己处理Cookie

有两咱广度可以添加cookie,

1.通过httpclient.setCookieStore(cookieStore)

2.通过httpGet或者httpPost的addHeader(newBasicHeader("Cookie",cookie));

第一种,

HttpClient是否在下次请求中携带从服务器端请求来的Cookie,完全是由设置决定的。

httpclient.getParams.setParameter(ClientPNames.COOKIE_POLICY,CookiePolicy.BEST_MATCH)或者CookiePolicy.BROWSER_COMPATIBILITY

如果设置为Cookie策略为BEST_MATCH,或BROWSER_COMPATIBILITY的话,HttpClient会在请求中携带由服务器返回的Cookie。如果不设置,应该需要手动添加了CookieStore,才会保持sesson.

如果设置为Cookie策略为默认的话,没设置,则需要手动通过

httpclient.setCookieStore(cookieStore);去设置.

注:如果用的是同一个HttpClient(上下两个请求用同一个httpclient对象。

且没去手动连接放掉client.getConnectionManager().shutdown();)!

都不用去设置cookie的ClientPNames.COOKIE_POLICY。httpclient都是会保留cookie的!

第二种,

通过Header去设置cookie,这种方法,就是今天要用的应用场景,

我们得到一个登录的cookie,免登录访问。

可以用浏览器登录,然后f12通过console执行document.cookie得到cookie,

用这个cookie,在访问时,设置httpGet或者httpPost的addHeader(newBasicHeader("Cookie",cookie));就可以免登录访问。

这种场景我用来用第一种方法,设置没成功,可能是因为用第一种时,没设置path,domain,expire的原因,我猪的。

这种场景可以解决第一次登录也需要验证码的网站。没有登录就没办法发布或刷新信息。

如赶集网。

相关推荐