java web中 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();
  } 

}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

时间: 2017-05-22

Java中SSM+Shiro系统登录验证码的实现方法

 先给大家展示下效果图: 1.验证码生成类: import java.util.Random; import java.awt.image.BufferedImage; import java.awt.Graphics; import java.awt.Font; import java.awt.Color; /** * 验证码生成器类,可生成数字.大写.小写字母及三者混合类型的验证码. 支持自定义验证码字符数量: 支持自定义验证码图片的大小: 支持自定义需排除的特殊字符: * 支持自定义干扰线

java编程基础之模仿用户登录代码分享

上一篇文章我们了解了Java背包问题求解实例代码,接下来我们看看Java中模仿用户登录的相关代码,下面是具体内容. 基于用户从控制台输入模拟的简陋用户登录验证Demo原理: 利用 Scanner 类中 nextLine() 提取用户从控制台输入的字符串信息 利用 String 类的 equals 方法进行用户输入验证 import java.util.Scanner; public class Login { public static void main(String[] args) { //

Java Web之限制用户多处登录实例代码

最近在项目中遇到一个需求,要求限制单个用户在多个终端登录(比如用户在A处登录,然后又在B处登录,此时A处就应该被挤下线).<!--more-->最开始我是想使用spring的security直接通过配置实现,简单又方便.不过很可惜的是,我所做的项目使用的是公司封装的框架,依然在使用sprign2.X.好吧,既然这个方法行不通,那我自己老老实实写代码实现吧,想想网上实现的方法应该很多吧,度娘.谷歌走一波,果断很多,不过过去过来感觉都是同一个.还有就是什么使用application啊,sessio

第三方网站微信登录java代码实现

前两个星期在公司中的项目加上了微信登录.绑定的功能,在这里做个记录! 一.开发前知识 1.微信开放平台与微信公众平台的区别 1.1 微信公众平台: ① 地址:https://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&lang=zh_CN ② 微信公众平台面向的是普通的用户,比如自媒体和媒体,企业官方微信公众账号运营人员使用,当然你所在的团队或者公司有实力去开发一些内容,也可以调用公众平台里面的接口,比如自定义菜单,自动回复,查询功能. 1.2

JAVA简单实现MD5注册登录加密实例代码

开发环境:jdk1.7,eclipse 框架:springmvc,mybatis 工具:maven 以下代码复制即可实现MD5加密 创建一个mave项目,加web.不懂得可以搜索一下就有了. 注册用户的JSP页面代码如下. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PU

JAVA 中解密RSA算法JS加密实例详解

JAVA 中解密RSA算法JS加密实例详解 有这样一个需求,前端登录的用户名密码,密码必需加密,但不可使用MD5,因为后台要检测密码的复杂度,那么在保证安全的前提下将密码传到后台呢,答案就是使用RSA非对称加密算法解决 . java代码 需要依赖 commons-codec 包 RSACoder.Java import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import java.security.

Java简单从文件读取和输出的实例

用Scanner输入,用PrintStream输出 功能:从in.txt读入,输出到out.txt 代码: 和下面的一样 package ioTest; import java.io.*; import java.util.Scanner; public class TestMain { public static void main(String[] args) { try { Scanner sc=new Scanner(new File("in.txt")); PrintStre

Android开发中通过手机号+短信验证码登录的实例代码

首先,需要一个电话号码,目前很多账户都是将账户名设置成手机号,然后点击按钮获取手机验证码. 其次,你需要后台给你手机短信的验证接口,各个公司用的不一样,这个身为前端,不需要你来考虑,你只要让你后台给你写好接口,你直接调用就好了. activity_login.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.andr

java 实现计数排序和桶排序实例代码

java 实现计数排序和桶排序实例代码 目录 比较和非比较的区别 常见的快速排序.归并排序.堆排序.冒泡排序等属于比较排序.在排序的最终结果里,元素之间的次序依赖于它们之间的比较.每个数都必须和其他数进行比较,才能确定自己的位置. 在 冒泡排序 之类的排序中,问题规模为n,又因为需要比较n次,所以平均时间复杂度为O(n²).在 归并排序.快速排序 之类的排序中,问题规模通过分治法消减为logN次,所以时间复杂度平均 O(nlogn) . 比较排序的优势是,适用于各种规模的数据,也不在乎数据的分布

Bootstrap弹出带合法性检查的登录框实例代码【推荐】

最近做了一个项目其中有项目需求涉及到访问控制,在访问需要登录才能使用的页面或功能时,会弹出登录框: 效果如下: 图 1-点击用户名时,如未登录弹出登录框 对这个功能的详细描述: 不涉及到登录时,登录框隐藏 涉及到登录时,登录框弹出到页面左上角 登陆成功后登录框隐藏 实现思路: 在body结束标签之前插入登录的div,设其定位方式为absolute,位置在左上角. 登录框默认的display属性为none.触发登录时,将该属性改为block 附上示例代码: <!DOCTYPE html> <

重写 ajax 实现 session 超时跳转到登录页面实例代码

问题:使用window.location.href来跳转页面的时候,后端只需实现一个过滤器就可以在session超时的情况下重定向到登陆页面.但是使用ajax呢?使用ajax来执行会发生302错误,并且页面不可能跳转.下面就针对这个问题来贴上我的前后端代码. 1.session过滤器 import java.io.IOException; <p style="text-align: center"><img alt=""import javax.s

使用Java和WebSocket实现网页聊天室实例代码

在没介绍正文之前,先给大家介绍下websocket的背景和原理: 背景 在浏览器中通过http仅能实现单向的通信,comet可以一定程度上模拟双向通信,但效率较低,并需要服务器有较好的支持; flash中的socket和xmlsocket可以实现真正的双向通信,通过 flex ajax bridge,可以在javascript中使用这两项功能. 可以预见,如果websocket一旦在浏览器中得到实现,将会替代上面两项技术,得到广泛的使用.面对这种状况,HTML5定义了WebSocket协议,能更

Java实现二维码功能的实例代码

最近突然想写一些文章,所以就陆陆续续的编写一些自我感觉有用的并且大家也可能用到的一些技术代码.方便互相学习交流. 今天这篇文章,主要是利用Java实现二维码: 在写代码之前先讲一下整体思路,以方便更好更快捷的实现功能. (1).首先要想实现二维码功能需要导入com.google.zxing的核心jar包,我这里导入的是core-3.2.1.jar; (2).所谓二维码莫过于把需要的内容放入一张图片中,所以这里首先是创建一张带有参数内容的图片,方法如下: private static Buffer

Java FTP上传下载删除功能实例代码

在没给大家上完整代码之前先给大家说下注意点: FTP上传下载,容易出现乱码,记得转换 package com.yinhai.team.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; impo