在通过java采集网页数据时,我们常常会遇到这样的问题:  站点需要登陆才能访问

而这种网站,一般都会对请求进行账号密码的验证,验证的方式也有多种,需要具体分析.

今天分析其中的一种情况:  站点对登陆密码进行动态加密,作为Cookie响应给客户端,之后的请求需要携带加密后的密码进行访问

登陆成功的响应头如下图:

之后的请求头:

因为每次登陆生成一个新的加密密码,所以之前的密码会失效
所以,需要在每次采集之前,先模拟登陆获取响应的密码,再作为cookie继续请求,我们选择采用HttpClient模拟请求.

我们模拟访问千瓜数据,代码如下:

 import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod; @Test
public void testLogin() throws IOException {
//时间戳
long timestamp = new Date().getTime();
//请求地址
String url = "http://api.qian-gua.com/login/Login?_=" + timestamp;
HttpClient client = new HttpClient();
//post请求方式
PostMethod postMethod = new PostMethod(url);
//推荐的数据存储方式,类似key-value形式
NameValuePair telPair = new NameValuePair();
telPair.setName("tel");
telPair.setValue("181****0732");
NameValuePair pwdPair = new NameValuePair("pwd","a123456");
//封装请求参数
postMethod.setRequestBody(new NameValuePair[]{telPair,pwdPair});
//这里是设置请求内容为json格式,根据站点的格式决定
//因为这个网站会将账号密码转为json格式,所以需要这一步
postMethod.setRequestHeader("Content_Type","application/json");
//执行请求
client.executeMethod(postMethod);
//通过Post/GetMethod对象获取响应头信息
String cookie = postMethod.getResponseHeader("Set-Cookie").getValue();
//截取需要的内容
String sub = cookie.substring(cookie.indexOf("&"), cookie.lastIndexOf("&"));
String[] splitPwd = sub.split("=");
String pwd = splitPwd[1];
System.out.println(pwd);
}

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

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

  1. httpClient模拟浏览器发请求

    一.介绍 httpClient是Apache公司的一个子项目, 用来提高高效的.最新的.功能丰富的支持http协议的客户端编程工具包.完成可以模拟浏览器发起请求行为. 二.简单使用例子 : 模拟浏览器 ...

  2. Java基础教程——模拟浏览器发送请求

    JAVA访问网页 分别测试使用get和post方法访问网页,可以收到服务器的请求,并写入到html文件中. import java.io.*; import java.net.*; import ja ...

  3. 20200726_java爬虫_使用HttpClient模拟浏览器发送请求

    浏览器获取数据: 打开浏览器 ==> 输入网址 ==> 回车查询 ==> 返回结果 ==> 浏览器显示结果数据 HttpClient获取数据: 创建HttpClient ==& ...

  4. 使用HttpClient配置代理服务器模拟浏览器发送请求调用接口测试

    在调用公司的某个接口时,直接通过浏览器配置代理服务器可以请求到如下数据: 请求url地址:http://wwwnei.xuebusi.com/rd-interface/getsales.jsp?cid ...

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

    转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/44407297 http://www.llwjy.com/blogdetail/9 ...

  6. Java利用httpasyncclient进行异步HTTP请求

    Java利用httpasyncclient进行异步HTTP请求 前段时间有个需求在springmvc mapping的url跳转前完成一个统计的业务.显然需要进行异步的处理,不然出错或者异常会影响到后 ...

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

    使用HttpClient来模拟浏览器登录网站,然后可以进行操作,比如发布信息等 第一步:获取实际的post网址,(不考虑复杂情况下) 1.需要使用到firefox的httpfox插件,httpfox中 ...

  8. java模拟浏览器发送请求

    package test; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOExcep ...

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

    目前,要为另一个项目提供接口,接口是用HTTP URL实现的,最初的想法是另一个项目用jQuery post进行请求. 但是,很可能另一个项目是部署在别的机器上,那么就存在跨域问题,而JQuery的p ...

随机推荐

  1. 我是青年你是良品-魅蓝NOTE 2

    2" title="我是青年你是良品-魅蓝NOTE 2">   明天魅蓝即将迎来自己的新品发布会.选择儿童节的第二天后最喜爱的手机品牌.让其成为真正青年的良品. 在 ...

  2. ChatterBot聊天机器人呢结构(五):ChatterBot对话流程

    原文地址:http://www.bugingcode.com/blog/ChatterBot_Dialogue_process.html 创建机器人 部署机器人的各种属性,根据前面的章节里聊天机器人的 ...

  3. jsde与gulp使用说明

    jade是一款基于haml的html模板引擎,已改为pug 1.全局安装 npm install jade -g 新建一个jade文件夹,再建一个后缀名为.jade的文件编辑.jade文件 jade ...

  4. javaScript系列 [28]

    本文介绍JavaScript事件相关的知识点,主要包括事件流.事件处理程序.事件对象(event)以及常见事件类型和事件委托等相关内容. 在网页开发涉及的三种基础技术(HTML CSS JavaScr ...

  5. 从国内APP更新“精雕细琢” 看国内外产品理念之差

    看国内外产品理念之差" title="从国内APP更新"精雕细琢" 看国内外产品理念之差"> 对于当下的大众来说,智能手机已经成为新的" ...

  6. Mysql锁和死锁分析

    在MySQL中,行级锁并不是直接锁记录,而是锁索引.索引分为主键索引和非主键索引两种,如果一条sql语句操作了主键索引,MySQL就会锁定这条主键索引;如果一条语句操作了非主键索引,MySQL会先锁定 ...

  7. 用RecyclerView做一个小清新的Gallery效果 - Ryan Lee的博客

    一.简介 RecyclerView现在已经是越来越强大,且不说已经被大家用到滚瓜烂熟的代替ListView的基础功能,现在RecyclerView还可以取代ViewPager实现Banner效果,当然 ...

  8. 【底层原理:深入理解计算机系统】#1 一切从"hello world"说起 (一)

    计算机系统是由硬件和系统软件组成的,他们共同工作来运行应用程序.虽然系统的具体实现方式随着时间不断的在变化,但是系统的内在概念却没有改变的. 所有的计算机硬件和软件有着相似的结构和功能.这个系列专题便 ...

  9. Vue组件传递数据

    组件命名 1.字母全小写且必须包含一个连字符 my-componnect 2.使用 kebab-case(短横线分隔命名) 定义一个组件时,你也必须在引用这个自定义元素时使用 kebab-case,例 ...

  10. 【5min+】保持程序健康的秘诀!AspNetCore的HealthCheck

    系列介绍 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net ...