java 通过HTTP请求模拟登陆,获取不到cookie,高手帮忙看一下,代码如下
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 通过HTTP请求模拟登陆,获取不到cookie,高手帮忙看一下,代码如下相关的知识,希望对你有一定的参考价值。
有些网站能获取到,但是http://app.lenovo.com一直获取不到,但是用fireBug是能看到cookie信息的,是不是网站做了什么限制?
URL url = null;
HttpURLConnection httpurlconnection = null;
try
url = new URL("http://app.lenovo.com");
httpurlconnection = (HttpURLConnection) url.openConnection();
httpurlconnection.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)");
httpurlconnection.connect();
String cookie0 = httpurlconnection.getHeaderField("Set-Cookie");
httpurlconnection.disconnect();
System.out.println(cookie0);
catch(Exception e)
e.printStackTrace() ;
List<String> cookieList = url_con.getHeaderFields().get("Set-Cookie");
if(cookieList != null)
for(String cookie : cookieList)
int p = cookie.indexOf("=");
String key = cookie.substring(0, p);
String value = cookie.substring(p+1, cookie.indexOf(";"));
cookies.put(key, value);
追问
用你给的方法获取到的cookieList为Null
追答有些会为了防止盗链 你必须要设置好header的各项东西
包括 请求方式 get post ,refer ,accept之类的
你可以慢慢试试.....
设置了也还是不行
追答你可以这样
用chrome 进入你要抓取的页面
然后 审核元素
然后 net work
看看请求这个页面都有哪些参数
比如说详细的头
您说的对,能否指点一下如何获取这个网站的cookie呢
追答你先看看js源码的设置部分看能不能用java来模拟,再有就是你可以找一个开源的浏览器源码,然后在执行第二次请求的时候获取cookie。
追问关于cookie部分的js代码是这样的,好弄吗
可否详细说一下
参考技术D 是不是360在后台封杀了,关了试试JAVA--利用HttpClient模拟浏览器登陆请求获取响应的Cookie
在通过java采集网页数据时,我们常常会遇到这样的问题: 站点需要登陆才能访问
而这种网站,一般都会对请求进行账号密码的验证,验证的方式也有多种,需要具体分析.
今天分析其中的一种情况: 站点对登陆密码进行动态加密,作为Cookie响应给客户端,之后的请求需要携带加密后的密码进行访问
登陆成功的响应头如下图:
之后的请求头:
因为每次登陆生成一个新的加密密码,所以之前的密码会失效
所以,需要在每次采集之前,先模拟登陆获取响应的密码,再作为cookie继续请求,我们选择采用HttpClient模拟请求.
我们模拟访问千瓜数据,代码如下:
1 import org.apache.commons.httpclient.HttpClient; 2 import org.apache.commons.httpclient.NameValuePair; 3 import org.apache.commons.httpclient.methods.PostMethod; 4 5 @Test 6 public void testLogin() throws IOException { 7 //时间戳 8 long timestamp = new Date().getTime(); 9 //请求地址 10 String url = "http://api.qian-gua.com/login/Login?_=" + timestamp; 11 HttpClient client = new HttpClient(); 12 //post请求方式 13 PostMethod postMethod = new PostMethod(url); 14 //推荐的数据存储方式,类似key-value形式 15 NameValuePair telPair = new NameValuePair(); 16 telPair.setName("tel"); 17 telPair.setValue("181****0732"); 18 NameValuePair pwdPair = new NameValuePair("pwd","a123456"); 19 //封装请求参数 20 postMethod.setRequestBody(new NameValuePair[]{telPair,pwdPair}); 21 //这里是设置请求内容为json格式,根据站点的格式决定 22 //因为这个网站会将账号密码转为json格式,所以需要这一步 23 postMethod.setRequestHeader("Content_Type","application/json"); 24 //执行请求 25 client.executeMethod(postMethod); 26 //通过Post/GetMethod对象获取响应头信息 27 String cookie = postMethod.getResponseHeader("Set-Cookie").getValue(); 28 //截取需要的内容 29 String sub = cookie.substring(cookie.indexOf("&"), cookie.lastIndexOf("&")); 30 String[] splitPwd = sub.split("="); 31 String pwd = splitPwd[1]; 32 System.out.println(pwd); 33 }
这样,就可以在之后的请求中携带加密的密码访问了
以上是关于java 通过HTTP请求模拟登陆,获取不到cookie,高手帮忙看一下,代码如下的主要内容,如果未能解决你的问题,请参考以下文章