存储CookieStore后运用httpClient登陆要权限的网址

本文介绍如何在存储CookieStore后,利用HttpClient访问需要权限认证的网站,涉及重定向和Cookie管理。
摘要由CSDN通过智能技术生成

存储CookieStore后运用httpClient登陆要权限的网址

最近在做一个豆瓣客户端的应用程序,做到一半时,发现我想要实现的一个功能因为豆瓣没有提供接口,而不能用HttpClient请求这个要拥有登陆权限的网页,后面在网上找资料,发现保存Cookie可以解决这个问题,非常兴奋,二话不说直接加代码:
org.apache.http.HttpResponse response = client.execute(post);
List<Cookie> cookies = client.getCookieStore().getCookies();//取出第一次登陆时的CookieStore
然后在下一次登陆时取出前面保存的的CookieStore
HttpGet httpGet = new HttpGet("http://movie.douban.com/mine");
DefaultHttpClient client = new DefaultHttpClient();
client.setCookieStore(NetUtil.getCookieStore());
org.apache.http.HttpResponse response = client.execute(httpGet);
OK改完了,一运行,打印请求访问网址的源代码,system.out有一个标签<h1>你没有权限访问该网页</h1>,当时心儿都碎了,这无解了,不知道问题出了那里,后面找呀找,找呀找,想到可能是取出Cookie的时候,取错了。
在通过OAuth2.0协议使豆瓣获取权限时,若你没登录之前直接授权,会给你返回一个授权网址,该网址有几个表单要填,用户名,密码、授权的的Button,我开始就是这样,把授权和登录搞在一起,发一个请求,把这个请求的Cookie保存下来了,导致后面取出来的CookieStore是错了,导致第二次访问有权限网址还是提示没有访问权限。所以要提醒各位保存Cookie时一定要保存正确。后面我分2次请求,第一次单独发一个登录请求,把这次请求带的CookieStore保存,这里要千万注意,一般登录成功后浏览器会自动重定向到主页面或其他的页面,android模拟浏览器请求也一样,所以如果你不禁止它重定向,你用HttpResponse.getAllHeaders得到的头信息会是(重定向请求)页面的头信息,禁用重定向的代码如下:
public static class RedirectHandler extends DefaultRedirectHandler {
@Override
public boolean isRedirectRequested(HttpResponse response,
HttpContext context) {
// TODO Auto-generated method stub
return false;
}
}
Httpclient.setRedirectHandler(new RedirectHandler());//设置后就不会重定向了。
然后第二次请求是授权的请求,把请求分开后保存的第一次CookieStore,这个保存的CookieStore就是正确的.


这是登录发生的真实请求

这是重定向的请求
我也是初学者,希望把我初学的经历分享出来
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值