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("18182230732");
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     }                                                    

这样,就可以在之后的请求中携带加密的密码访问了

原文地址:https://www.cnblogs.com/nysd/p/12582186.html

时间: 2024-08-26 11:13:30

JAVA--利用HttpClient模拟浏览器登陆请求获取响应的Cookie的相关文章

httpClient模拟浏览器发请求

一.介绍 httpClient是Apache公司的一个子项目, 用来提高高效的.最新的.功能丰富的支持http协议的客户端编程工具包.完成可以模拟浏览器发起请求行为. 二.简单使用例子 : 模拟浏览器发起访问谷歌首页请求 1.pom.xml 配置 <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <ve

httpClient模拟浏览器登陆之谜

httpClient能够模拟浏览器进行自动登陆,但是如果页面上加了一个小小的验证码,自动登陆就会变的非常非常之复杂. 下面我们讨论的问题,都是不考虑有验证码等防止自动化登陆的情况下进行处理. 利用httpClient进行一个简单的登陆示例: packagetest.ffm83.commons.httpClient; importjava.util.ArrayList; importjava.util.List; importorg.apache.http.HttpEntity; importor

关于HttpClient模拟浏览器请求的參数乱码问题解决方式

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/44407297 http://www.llwjy.com/blogdetail/9383e88e4bc7378b8318e15b0ac33559.html 个人博客站已经上线了,网址:www.llwjy.com,欢迎大家吐槽~ -----------------------------------------------------------------------------

关于HttpClient模拟浏览器请求的参数乱码问题解决方案

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/44407297 http://www.llwjy.com/blogdetail/9383e88e4bc7378b8318e15b0ac33559.html 个人博客站已经上线了,网址:www.llwjy.com,欢迎大家吐槽~ -----------------------------------------------------------------------------

Java学习路线分享SpringMVC之请求和响应

Java学习路线分享SpringMVC之请求和响应,前面我们学习了SpringMVC的基本配置,接下来一个非常重要的知识点是如何接受用户的请求以及如何将数据发送给用户. 获得请求参数 获得页面参数的几种方式 1)通过参数名获得 给控制器的方法设置参数名和表单name相同 2)通过@RequestParam("参数名")注解设置参数 @RequestParam("表单元素的name") 参数类型 参数名 3)自动装箱,创建属性名和表单名称一样的类 把类作为方法的参数

JAVA利用HttpClient进行POST请求(HTTPS)

目前,要为另一个项目提供接口,接口是用HTTP URL实现的,最初的想法是另一个项目用jQuery post进行请求. 但是,很可能另一个项目是部署在别的机器上,那么就存在跨域问题,而JQuery的post请求是不允许跨域的. 这时,就只能够用HttpClient包进行请求了,同时由于请求的URL是HTTPS的,为了避免需要证书,所以用一个类继承DefaultHttpClient类,忽略校验过程. 1.写一个SSLClient类,继承至HttpClient [java] view plain c

Java语言使用HttpClient模拟浏览器登录

使用HttpClient来模拟浏览器登录网站,然后可以进行操作,比如发布信息等 第一步:获取实际的post网址,(不考虑复杂情况下) 1.需要使用到firefox的httpfox插件,httpfox中clear一下,然后start开始捕获 2.切换回网页的登录页面,开始输入自己的账号密码登录,登录成功后切回httpfox中stop,查看最近的post方法中包含的Post Data数据,和此post方法的url网址, 3.这样就得到了模拟登录时需要Post的数据参数(Parameter)和值(Va

基于nodejs模拟浏览器post请求爬取json数据

今天想爬取某网站的后台传来的数据,中间遇到了很多阻碍,花了2个小时才请求到数据,所以我在此总结了一些经验. 首先,放上我所爬取的请求地址http://api.chuchujie.com/api/?v=1.0: 下面我们开始爬取数据. 一.写一个基于nodejs的爬虫 1.引入所需模块 这里需要引入http模块(nodejs用来向浏览器发送http请求的模块)和querystring模块(把前台传过来的对象形式的参数转化成字符串形式): var http = require("http"

Java利用HttpClient进行网页登录

http://e.neusoft.edu.cn/nav_login 模拟浏览器登录上面这个网站,登录服务器根据验证码.refer和cookie保护措施,验证码在html文件里. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.