java web中 HttpClient模拟浏览器登录后发起请求

发布时间 - 2026-01-11 01:16:23    点击率:

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

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


# HttpClient模拟浏览器登录后发起请求  # java  # HttpClient模拟浏览器登录  # Java httpClient介绍以及使用示例  # java httpclient设置超时时间和代理的方法  # Java11新特性之HttpClient小试牛刀  # java使用common-httpclient包实现post请求方法示例  # JAVA通过HttpClient发送HTTP请求的方法示例  # JAVA利用HttpClient进行HTTPS接口调用的方法  # Java爬虫Jsoup+httpclient获取动态生成的数据  # JAVA利用HttpClient进行POST请求(HTTPS)实例  # 使用java的HttpClient实现多线程并发  # Java利用HttpClient模拟POST表单操作应用及注意事项  # Java HttpClient实现socks代理的示例代码  # 首页  # 文件系统  # 则将  # 保存为  # 自己的  # 的是  # 带着  # 希望能  # 如果没有  # 可以使用  # 句话  # 谢谢大家  # 该文件  # 跳转到  # 是否正确  # 均未  # 客户端  # 重定向  # 替换成  # 几个步骤 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: node.js报错:Cannot find module 'ejs'的解决办法  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  郑州企业网站制作公司,郑州招聘网站有哪些?  动图在线制作网站有哪些,滑动动图图集怎么做?  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  简单实现Android验证码  jquery插件bootstrapValidator表单验证详解  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  浅述节点的创建及常见功能的实现  Laravel怎么使用artisan命令缓存配置和视图  如何快速搭建高效简练网站?  nodejs redis 发布订阅机制封装实现方法及实例代码  微信小程序 input输入框控件详解及实例(多种示例)  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Android使用GridView实现日历的简单功能  如何用虚拟主机快速搭建网站?详细步骤解析  如何在阿里云完成域名注册与建站?  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Android滚轮选择时间控件使用详解  Android Socket接口实现即时通讯实例代码  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  高防服务器租用如何选择配置与防御等级?  ,南京靠谱的征婚网站?  IOS倒计时设置UIButton标题title的抖动问题  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  C#如何调用原生C++ COM对象详解  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  *服务器网站为何频现安全漏洞?  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  如何快速建站并高效导出源代码?  Linux系统运维自动化项目教程_Ansible批量管理实战  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  什么是javascript作用域_全局和局部作用域有什么区别?  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  公司门户网站制作流程,华为官网怎么做?  想要更高端的建设网站,这些原则一定要坚持!  Laravel怎么实现验证码(Captcha)功能  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  zabbix利用python脚本发送报警邮件的方法  Bootstrap整体框架之JavaScript插件架构  iOS UIView常见属性方法小结