java web中 HttpClient模拟浏览器登录后发起请求
作者:lqh 发布时间:2022-10-27 23:07:05
标签:java,HttpClient
HttpClient模拟浏览器登录后发起请求
浏览器实现这个效果需要如下几个步骤:
1请求一个需要登录的页面或资源
2服务器判断当前的会话是否包含已登录信息。如果没有登录重定向到登录页面
3手工在登录页面录入正确的账户信息并提交
4服务器判断登录信息是否正确,如果正确则将登录成功信息保存到session中
5登录成功后服务器端给浏览器返回会话的SessionID信息保存到客户端的Cookie中
6浏览器自动跳转到之前的请求地址并携带之前的Cookie(包含登录成功的SessionID)
7服务器端判断session中是否有成功登录信息,如果有则将请求的资源反馈给浏览器
package com.artsoft.demo;
import java.io.FileOutputStream;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.CookieStore;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.PoolingClientConnectionManager;
import org.apache.http.util.EntityUtils;
/**
* TODO(用一句话描述该文件的作用)
*
* @title: HttpClientDemo.java
* @author zhangjinshan-ghq
* @date 2014-6-11 14:59:04
*/
public class HttpClientDemo
{
/**
* The main method.
*
* @param args the arguments
* @throws Exception the exception
*/
public static void main(String[] args) throws Exception
{
getResoucesByLoginCookies();
}
/**
* 根据登录Cookie获取资源
* 一切异常均未处理,需要酌情检查异常
*
* @throws Exception
*/
private static void getResoucesByLoginCookies() throws Exception
{
HttpClientDemo demo = new HttpClientDemo();
String username = "......";// 登录用户
String password = "......";// 登录密码
// 需要提交登录的信息
String urlLogin = "http://hx.buscoming.cn/Api/Security/Logon?UserCode=" + username + "&Password=" + password;
// 登录成功后想要访问的页面 可以是下载资源 需要替换成自己的iteye Blog地址
String urlAfter = "http://hx.buscoming.cn/Api/Security/GetLoginAccount";
DefaultHttpClient client = new DefaultHttpClient(new PoolingClientConnectionManager());
/**
* 第一次请求登录页面 获得cookie
* 相当于在登录页面点击登录,此处在URL中 构造参数,
* 如果参数列表相当多的话可以使用HttpClient的方式构造参数
* 此处不赘述
*/
HttpPost post = new HttpPost(urlLogin);
HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();
CookieStore cookieStore = client.getCookieStore();
client.setCookieStore(cookieStore);
/**
* 带着登录过的cookie请求下一个页面,可以是需要登录才能下载的url
* 此处使用的是iteye的博客首页,如果登录成功,那么首页会显示【欢迎XXXX】
*
*/
HttpGet get = new HttpGet(urlAfter);
response = client.execute(get);
entity = response.getEntity();
/**
* 将请求结果放到文件系统中保存为 myindex.html,便于使用浏览器在本地打开 查看结果
*/
String pathName = "d:\\index.html";
writeHTMLtoFile(entity, pathName);
}
/**
* Write htmL to file.
* 将请求结果以二进制形式放到文件系统中保存为.html文件,便于使用浏览器在本地打开 查看结果
*
* @param entity the entity
* @param pathName the path name
* @throws Exception the exception
*/
public static void writeHTMLtoFile(HttpEntity entity, String pathName) throws Exception
{
byte[] bytes = new byte[(int) entity.getContentLength()];
FileOutputStream fos = new FileOutputStream(pathName);
bytes = EntityUtils.toByteArray(entity);
fos.write(bytes);
fos.flush();
fos.close();
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:https://my.oschina.net/zhangzexing/blog/897459
0
投稿
猜你喜欢
- 本文实例为大家分享了Java执行SQL脚本文件到数据库的具体方式,供大家参考,具体内容如下方式一:直接读取SQL脚本文件的内容,然后传递到S
- mybatis的大于小于号转义符号言简意赅!如下XML转义字符<<小于号>>大于号<=
- Java5 在 java.util.concurrent 包中已经包含了读写锁。尽管如此,我们还是应该了解其实现背后的原理。读/写锁的 Ja
- 前言之前我们提到了 CustomPaint er 的 Paint 可以使用渐变(GradientShader)来填充绘制的图形,本篇我们来介
- 定义享元模式(FlyWeight Pattern),也叫蝇量模式,运用共享技术,有效的支持大量细粒度的对象,享元模式就是池技术的重要实现方式
- 一、先看下项目结构CodeGenerator:生成器主类resources下的mapper.java.vm:一个模板类,用以在生成dao层时
- 现在软件或者网页的并发量越来越大了,大量请求直接操作数据库会对数据库造成很大的压力,处理大量连接和请求就会需要很长时间,但是实际中百分之80
- 开篇本文主要来探讨一下 redis 的单线程模型,文章前半部分会先引用某网络课程讲解的内容(图片+语言描述),后半部分是本人粗略阅读 red
- 一、代码先上代码(以下这段代码会有多种执行结果)@Testpublic void test_interrupted_thread() thr
- 注解注解定义Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。Java 语言中的类、方法、变
- springboot项目没有mainClass实现打包运行项目分为两个部分,一个是业务代码模块,一个是框架模块,运行class放在框架部分,
- 一、定义1、T 代表一种类型可以加在类上,也可以加在方法上1)T 加在类上class SuperClass<A>{//todo}
- Java并发包的locks包里的锁基本上已经介绍得差不多了,ReentrantLock重入锁是个关键,在清楚的了解了同步器AQS的运行机制后
- 1.首先,八种基本数据类型分别是:int、short、float、double、long、boolean、byte、char; &
- 现在有一张订单表t_stockorder,其拥有id、code、client_id、merchandise_id、merchandise_n
- 如下所示:Synchronized是内置的java关键字,Lock是一个java类。Synchronized无法判断是否获取到了锁,Lock
- import java.io.BufferedReader;import java.io.File;import java.io.FileI
- 本文主要介绍了Maven实战之搭建Maven * 和镜像的方法(图文),分享给大家,具体如下:准备工作安装3.6.*的Nexus理论Nexus
- java内存分析类加载的过程类的加载与ClassLoader的理解类的初始化package Collections;public class
- 一:问题引入前面讲到用户支付完成之后微信支付服务器会发送回调通知给商户,商户要能够正常处理这个回调通知并返回正确的状态码给微信支付后台服务器