java 获取页面cookie_使用java抓取已登录的页面兼谈cookie的作用。

场景

想做个东西,大量抓取豆瓣FM歌曲的数据存到数据库。

可以用来练习sql、或者作为再抓取的索引、或者是性能实验的基础数据。

但是碰到点障碍:怎么抓都是那么几条数据。我想应该是没有cookie引起的(即没有登录)。

什么是Cookie,cookie的工作流程

Cookie是服务器端程序存放在客户电脑上的数据。服务器端会通过这些数据作判断。最令人不安的自动登录就是如此原理。

客户端如何组织cookie,服务器不在乎。(我知道的ie是文件,firefox是sqlite数据)

服务器往浏览器(客户端)写cookie,反应到HTTP响应头如下:

Set-Cookie key=value;key2=value2

浏览器(客户端)提交请求是会根据域(domain)和路径(path)查询cookie并返回给服务器端。反应到HTTP请求头如下:

Cookie : key=name;

模拟Cookie

方式一、可以使用firefox浏览器的Httpfox插件查看相应请求的cookie。通过实验来确定具体起到身份验证那对键值。

等请求的时候设置到http请求头里

Cookiedbcl2="12345678:abcde/fghijk";

方式二、模拟一次登录(post),保存响应头里的Set-Cookie。

JAVA代码

publicclassTest {publicstaticvoidmain(String[] args) {

Fetcher fetcher=FetcherFactory.createDoubanSongFetcher();//对应douban.fm的cookie的关键key为ddc12fetcher.fetchData(newDoubanRequest(1,"dbcl2=\"12345678:abcde/fghijk\";"));

}

}

protectedString fetch(RequestData request) {try{

URL url=newURL(request.getURL());

HttpURLConnection conn=(HttpURLConnection) url.openConnection();

conn.setDoInput(true);

conn.setRequestMethod("GET");

conn.setRequestProperty("Cookie",request.getCookie());

InputStream in=null;

in=conn.getInputStream();

String content=pipe(in, request.getCharset());returncontent;

}catch(Exception e) {

e.printStackTrace();

}returnnull;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值