`
vortexchoo
  • 浏览: 66858 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

HttpClient 模拟登录保持session并继续进行登录后操作

    博客分类:
  • java
 
阅读更多

 公司考勤签到,每天都要登录系统签到,于是就在想:如果可以每天自动签到就好了。

看了http://unmi.cc/httpclient-login-session/这篇微博,也试着写了下。

大概思路是:模拟登录考勤系统,调用“打点接口”.

import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;

import com.vortex.sign.vo.ParamVo;

public class HttpClientLoginAndSign {
	
	private static final String SIGN_REQ_URI = "签到接口相对路径";
	private static final String LOGIN_REQ_URI = "登录接口相对路径";
	private static final String REQ_ADDR = "server IP+Port"; 
        //以上参数不方便透露
	
    /**
     * 模拟登录+打点
     * @param pv 数据传递容器
     */	
    public static void loginAndSign(ParamVo pv){
        //模拟登录URL
        String loginUrl = REQ_ADDR+LOGIN_REQ_URI;
		String type = SignTypeHandler.getSignType();
        
        //模拟打点URL+参数
        String dataUrl = REQ_ADDR+SIGN_REQ_URI+"?account="+pv.getUserId()+"&id="+pv.getId()+"&type="+type;
 
        HttpClient httpClient = new HttpClient();
 
        //获得POST请求方法
        PostMethod postMethod = new PostMethod(loginUrl);
        postMethod.setRequestHeader("Referer", 实际值);
        postMethod.setRequestHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2453.0 Safari/537.36");
        //设置登录请求参数
        NameValuePair[] data = {
                new NameValuePair("username", pv.getUsername()),
                new NameValuePair("password", pv.getPassword()),
        };
        postMethod.setRequestBody(data);
 
        try {
            //设置 HttpClient 接收 Cookie,用与浏览器一样的策略
            httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
            int loginState = httpClient.executeMethod(postMethod);
            System.out.println(loginState);
            //获得登陆后的 Cookie
            Cookie[] cookies=httpClient.getState().getCookies();
            String tmpcookies= "";
            for(Cookie c:cookies){
                tmpcookies += c.toString()+";";
            }
 
            //进行登陆后的操作
            GetMethod getMethod = new GetMethod(dataUrl);
 
            //每次访问需授权的网址时需带上前面的 cookie 作为通行证
            getMethod.setRequestHeader("cookie",tmpcookies);
            
            
            httpClient.executeMethod(getMethod);
        } catch (Exception e) {
            System.out.println("登陆出错------------->"+e.getMessage());
        }   
    }
}

 这一段代码重要的地方就是 getMethod.setRequestHeader("cookie",tmpcookies);

我要测试的系统在登录后将用户的token放入了session中,以后的请求都被过滤器过滤,如果session中没有token,那么就无法完成访问。

所以在签到请求的时候要先把登录后得到的cookie存入到本次的请求中去。

因为cookie中有JSESSIONID,这个就是session标识,server也就是用这个来获取session并使用的。

所以当getMethod设置了cookie后,再去做签到请求,通俗的讲:考勤系统会拿着这个sessionId去寻找session,找到后寻找在登录时已经存入的登录信息。这是一定能找到的,因此是可以请求成功的。


分享到:
评论

相关推荐

    httpclient如何保持session会话模拟登录后的操作

    以上就是使用Apache HttpClient保持session会话并模拟登录后的操作的详细步骤。在实际开发中,你可能需要根据具体的服务器响应和协议进行适当的调整。HttpClient提供了丰富的API和配置选项,可以灵活应对各种网络...

    java httpclient 模拟登录

    在"java httpclient 模拟登录"这个场景下,我们通常会用到HttpClient来模拟用户登录网站的过程,获取登录后的session信息,以便后续能够访问登录后才能看到的页面内容。以下将详细介绍如何使用Java HttpClient进行...

    httpclient模拟登录实例

    本篇文章将详细讲解如何使用HttpClient进行模拟登录操作,结合源码分析,帮助开发者深入理解其工作原理。 HttpClient库由Apache基金会开发,提供了全面的HTTP协议支持,包括标准与扩展的HTTP方法、连接管理、重试...

    HttpClient模拟登陆

    在阅读博文《HttpClient模拟登陆》时,可以深入学习如何解决这些具体问题,并查看示例代码以获得更详细的实现细节。 标签“源码”意味着你需要关注底层的工作原理,而“工具”标签则暗示HttpClient作为一个实用工具...

    java模拟淘宝登录源码

    登录成功后,服务器会返回一些关键的标识,如Session ID或Cookie,这些标识用于后续的会话保持。 三、HTTP请求构造 使用HTTPClient构建登录请求时,需要创建`HttpPost`对象,设置目标URL为淘宝的登录接口。然后,...

    (最新)HttpClient4模拟登录腾讯微博

    在模拟登录过程中,通常需要设置POST请求,填充登录表单数据,如用户名、密码,并可能需要处理登录后的Session和Cookie来保持会话状态。 首先,我们需要引入HttpClient4的相关依赖到项目中。如果是Maven项目,可以...

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

    Java Web 中 HttpClient 模拟浏览器登录后发起请求 Java Web 中 HttpClient 模拟浏览器登录后发起请求是指在 Java Web 应用程序中使用 HttpClient 库模拟浏览器的行为,模拟浏览器登录到服务器,然后发起请求获取...

    httpclient4之百度模拟登陆,回复与58同城自动登陆

    HttpClient4通过构建HTTP请求,设置请求头,如User-Agent(模拟浏览器标识),Cookie(用于保持登录状态)等,以及POST或GET参数,来模拟用户行为。在模拟登录过程中,我们需要获取登录页面的CSRF令牌(跨站请求伪造...

    HttpClient模拟登陆方正系统

    1. 保持会话:登录成功后,服务器通常会返回一个session cookie。在后续的请求中,我们需要把这个cookie添加到请求头中,以保持会话: ```java Header[] cookies = response.getAllHeaders(); for (Header cookie...

    HttpClient登录

    注意,实际登录过程中,你可能需要处理更复杂的逻辑,比如验证码、登录状态保持(通过Cookie或Session)、重定向等。在网易相册的案例中,可能还需要分析登录页面的HTML来获取隐藏字段或者动态生成的令牌。此外,...

    httpUtil httpclient 登陆携带cookie访问下一个连接

    总之,`httpclient`库提供了一种高效且灵活的方式来模拟用户登录并携带cookie访问其他网页,这对于自动化测试、数据抓取或需要保持登录状态的Web服务来说是非常有用的。正确地理解和使用这些技术,能够帮助开发者更...

    C#网站模拟登录器|带验证码模拟登录源代码

    5. **会话管理**:登录成功后,网站通常会设置会话(Session)或Cookie来跟踪用户状态。模拟登录器需要正确处理这些会话信息,以维持登录状态。 6. **错误处理和重试机制**:网络请求可能会失败,因此程序需要包含...

    httpclient3 自动登陆淘宝, 开心网

    - **保存Session**:成功登录后,获取服务器返回的Session ID或其他认证信息,以便在后续请求中保持会话状态。 - **再次请求**:使用保存的Session信息构造新的请求,模拟已登录状态访问其他页面。 3. **淘宝和...

    C#模拟登录淘宝联盟并下载淘宝客订单xls

    1. **网络请求库**:在C#中,我们通常会使用HttpClient类来发送HTTP请求,模拟登录需要GET和POST请求,HttpClient提供了一个方便的接口来处理这些操作。 2. **Cookie管理**:模拟登录过程中,服务器通常会返回一个...

    模拟百度登录 精品代码

    这里的“抓取”可能是指在成功登录后,继续获取用户权限范围内的网页内容。 在模拟登录过程中,通常需要以下几个步骤: 1. **请求登录页面**:通过GET请求获取登录页面的HTML,从中提取登录表单的字段信息,如...

Global site tag (gtag.js) - Google Analytics