网站首页 > 基础教程 正文
导读:本文分为两部分,第一部分为 Cookie 基础概述,第二部分为 Cookie 的应用场景,及爬取多个网站数据做聚合报表的思路。
概述
Cookie 是服务器保存在浏览器里的一小部分文本信息。由服务器端生成并通过设置响应头(Set-Cookie)通知浏览器保存 Cookie。当浏览器再次请求同一域名端口(同源)就会自动发送该 Cookie 给服务器,即添加在请求头部(前提是浏览器设置为启用 Cookie)。
简单地说,Cookie是一种能够让服务器把少量数据储存到客户端的硬盘或内存里,或是从客户端的硬盘里读取数据的一种技术。
Cookie 的属性
服务器向浏览器发送 Cookie 的时候,除了 Cookie 本身的内容,还有一些可选内容
- value属性:value属性是必需的,用于指定Cookie的值。
- expires属性:expires属性用于指定 Cookie 过期的时间。如果不设置该属性,或者设为null,Cookie只在当前会话(session)有效,浏览器窗口一旦关闭,当前 Session 结束,该 Cookie 就会被删除。
- domain属性:domain属性指定 Cookie 的域名信息。每次请求的时候,都会根据domain来发送相应的 Cookie。
- path属性:用来指定路径,默认的path是当前的路径。Cookie 的path属性可以有效地过滤哪些 Cookie 可以发送给服务器,哪些不发送。
- secure属性:secure属性用来指定Cookie只能在加密协议HTTPS下发送到服务器。
- max-age:max-age属性用来指定Cookie有效期,比如60 60 24 * 365(即一年31536e3秒)。
- HttpOnly:HttpOnly属性用于设置该Cookie不能被JavaScript读取。
以 Google Chrome 浏览器为例,访问 chrome://settings/siteData 就可以看到所有保存的 Cookie 及每个 Cookie 具体的各项属性值。
Cookie 应用场景与思路
场景:我们在一个网站上进行账号登录时可以勾选记住账户和密码,这样下次再访问该网站就不用再次输入账号密码,这就是 Cookie 一个常见的应用场景。
特殊场景:但有的时候我们并不想在网站上通过页面操作查看数据,而是通过编写爬虫采用接口调用的方式直接获取数据做聚合。
思路:
- 借助 selenium 操作浏览器实现账号登录
- 获取 Cookie 并入库保存
- 使用抓包工具如 Fiddler 分析目标接口的请求方式、参数等信息
- 编写程序进行接口访问,请求时加上 Cookie
附:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.9.0</version>
</dependency>
// org.apache.http 请求时附带 Cookie 的 Demo
BasicCookieStore cookieStore = new BasicCookieStore();
// 装载 cookie
BasicClientCookie cookie = new BasicClientCookie(name, value);
cookie.setDomain(domain);
cookie.setPath(path);
cookie.setSecure(isSecure);
cookie.setExpiryDate(expiry);
cookieStore.addCookie(cookie);
HttpClient client = HttpClientBuilder.create().setDefaultCookieStore(cookieStore).build();
HttpGet request = new HttpGet("https://xxxxxxxxxxx/business_api/shop/homepage/realtime_overview");
HttpResponse response = client.execute(request);
最后
感谢您的阅读,如果喜欢本文欢迎关注和转发,转载需注明出处,本头条号将持续分享IT技术知识。对于文章内容有其他想法或意见建议等,欢迎提出共同讨论共同进步。
参考文章
https://blog.csdn.net/Lanhaorena/article/details/109151873
https://zhuanlan.zhihu.com/p/354762095
https://blog.csdn.net/u010084228/article/details/78269345
- 上一篇: 55个JS代码让你轻松当大神
- 下一篇: 工作中,前端开发要看项目,怎么查看别人的js项目代码
猜你喜欢
- 2024-11-26 工作中,前端开发要看项目,怎么查看别人的js项目代码
- 2024-11-26 55个JS代码让你轻松当大神
- 2024-11-26 操作cookie
- 2024-11-26 9个原生js库助力前端开发,你都用过吗?
- 2024-11-26 Selenium4+Python3系列(七) Iframe、常见控件、JS、Cookie操作
- 2024-11-26 浅谈JavaScript的用处
- 2024-11-26 Web安全:XSS怎么实现?Cookie 劫持如此简单,你的网站安全吗?
- 2024-11-26 Cookies和Session的区别和理解
- 2024-11-26 cookie是什么?有什么用?cookie详解,一篇文章彻底搞懂cookie
- 2024-11-26 python+selenium文件上传,Cookie操作,调用 JS,窗口截图
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)