0 0

java模拟登陆无法成功15

步骤
1.打开网站http://esales.10010.com/,将jessionId,cookie,验证码,,viewState保存下来
2.模拟登录,设置cookie等信息
3.返回登录的结果,发现跟抓包工具获取的信息不一致,即使登录错误也没提示

1).设置jsessionId,cookie等为全局变量
if (StringUtils.isBlank(LoginMes.getSessionId())) {// 如果JsessionId为空,需要重取
String jsessionId = "0GmrRDpHphl76H1Ty1ZTjQSs27vvXw1TRsHpNBYLNGy2C7bQHsSq!1861677778";
Cookie[] cookies = new Cookie[2];
cookies[0] = new Cookie("esales.10010.com", "JSESSIONID", jsessionId);
cookies[1] = new Cookie(".10010.com", "LOGINVERIFYCODE", "8XlcQT7RNvs=");
LoginMes.setCookies(cookies);
Map<String,String> map = new HashMap<String, String>();
map.put("jsessionid", "JSESSIONID="+jsessionId);
map.put("loginVerifycode", "8XlcQT7RNvs=");
map.put("verifyUrl", Constant.PICNAME);
LoginMes.setLoginMap(map);
}
2).登录的方法
/** 得到客户端
* @param path
  * @param nameValuePairs
  * @param encode
  * @param sessionId
  * @return
  */
public static HttpClient getHttpClient(String path, NameValuePair[] nameValuePairs, String encode, String sessionId) {
HttpClient client = new HttpClient();
PostMethod postMethod = new PostMethod(path);
postMethod.setRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
postMethod.setRequestHeader("Accept-Encoding", "gzip,deflate,sdch");
postMethod.setRequestHeader("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
postMethod.setRequestHeader("Connection", "keep-alive");
     postMethod.setRequestHeader("Cookie", "");
postMethod.setRequestHeader("Host", "esales.10010.com");
postMethod.setRequestHeader("Referer", "esales.10010.com");
postMethod.setRequestHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1");
postMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
postMethod.setRequestHeader("P3P", "CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR");
postMethod.getParams().setCookiePolicy(CookiePolicy.IGNORE_COOKIES);
if (nameValuePairs != null) {
postMethod.setRequestBody(nameValuePairs);
}
try {
client.getParams().setParameter("http.protocol.single-cookie-header", true);
int stats = client.executeMethod(postMethod);
client.getState().clearCookies();
client.getState().addCookie(new Cookie(".10010.com", "LOGINVERIFYCODE", "8XlcQT7RNvs="));
client.getState().addCookie(new Cookie("esales.10010.com", "JSESSIONID", sessionId.substring("JSESSIONID=".length())));
if (stats == HttpStatus.SC_OK) {
// 登陆成功后需要设置对应的cookie
System.out.println("联网成功!");
}
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
postMethod.releaseConnection();// 这里最好把之前的资源放掉
//CookieSpec cookiespec = CookiePolicy.getDefaultSpec();
return client;
}
3.获取viewState,该值已存在文件d:\zt.log中
public static String getViewState() {
String fullcanshu = "";
try {
File file = new File("d:/zt.log");
FileInputStream inputStream = new FileInputStream(file);
BufferedReader reader = new  BufferedReader(new InputStreamReader(inputStream,"utf-8"));
String canshu = null;
while((canshu = reader.readLine())!=null){
fullcanshu += canshu;
}
reader.close();
inputStream.close();
} catch (Exception e) {

}
return fullcanshu;
}
4.判断是否登陆成功,根据响应ContentLength判断
public static boolean isLogin() {
boolean login = false;// 登陆未成功
String jsessionid = LoginMes.getSessionId();
if (StringUtils.isNotBlank(jsessionid)) {
try {
         HttpParams httpParams = new BasicHttpParams();
         HttpConnectionParams.setConnectionTimeout(httpParams,5000); //设置连接超时为5秒
        org.apache.http.client.HttpClient client = new DefaultHttpClient(httpParams); // 生成一个http客户端发送请求对象
      //在本地上下问中绑定一个本地存储
//创建一个本地上下文信息
        HttpPost httpPost = new HttpPost(Constant.HTTPURL+";"+jsessionid); //设定请求方式
        httpPost.getParams().setParameter("http.protocol.cookie-policy", CookiePolicy.BROWSER_COMPATIBILITY);
         httpPost.getParams().setParameter("http.protocol.single-cookie-header", true);
         HttpResponse httpResponse = client.execute(httpPost); // 发送请求并等待响应
          // 判断网络连接是否成功
        if (httpResponse.getStatusLine().getStatusCode() != 200) {
          System.out.println("网络错误异常!!!!");
             }
         HttpEntity entity = httpResponse.getEntity(); // 获取响应里面的内容
        if (-1 != entity.getContentLength()) {
          login = true;
         }
         Header[] headers =  httpResponse.getAllHeaders();
         for (Header header : headers) {
          System.out.println("----headerName:" +header.getName() +"value:" + header.getValue());
         }
         System.out.println("clietCOOkie" + client.getParams().getParameter("Cookie"));
         /*// 得到服务气端发回的响应的内容(都在一个字符串里面)
         InputStream inputStream = entity.getContent();  // 得到服务气端发回的响应的内容(都在一个流里面)
         BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,"utf-8"));
String line = "";
while((line = reader.readLine())!=null){
if(line.indexOf("form")!=-1){
login = false;
break;
}
}*/
       } catch (Exception e) {
        login = false;
        System.out.println("这是异常!");
       }
} else {
login = false;
System.out.println("已超时,请重新登陆!");
}
return login;
}
5.登陆
setJessionId();
NameValuePair[] nameValuePairs = { new NameValuePair("AJAXREQUEST","_viewRoot")
,new NameValuePair("_authKey","")
,new NameValuePair("j_id2:province","17")
,new NameValuePair("tokenPwd","")
,new NameValuePair("username","sdsc-yaosz3")// 用户名
,new NameValuePair("password","YSZ2013")// 密码
,new NameValuePair("verifyCode","rzun")// 验证码
,new NameValuePair("j_id2_SUBMIT","1")
,new NameValuePair("j_id2:j_id6","j_id2:j_id6")
,new NameValuePair("javax.faces.ViewState",getViewState())};
String path = Constant.HTTPURL;
HttpClient client = getHttpClient(path, nameValuePairs,  "utf-8", LoginMes.getSessionId());
Cookie[] cookies = client.getState().getCookies();
System.out.println("登陆的cookie");
String cookieStr = "";
for (Cookie cookie : cookies) {
cookieStr += cookie.getName()+ "=" + cookie.getValue() + ";";
}
System.out.println(cookieStr);
LoginMes.setCookies(client.getState().getCookies());
boolean s = isLogin();
if (s) {
System.out.println("已登陆");
} else {
System.out.println("未登陆");
}

.

2013年6月24日 09:05

1个答案 按时间排序 按投票排序

0 0

请看这个是模拟登录ITeye的, 处理cookie的。

http://lihao312.iteye.com/admin/blogs/1882632

2013年6月24日 10:41

相关推荐

    java实现模拟SSH和telnet登陆(实现命令的发送和接受)

    NULL 博文链接:https://zrzdemon.iteye.com/blog/1499804

    java login 用户登陆程序404错误解决办法

    java做的login用户登录程序,调试中遇到HTTP Status 404,解决HTTP Status 404问题错误的办法。

    JAVA上百实例源码以及开源项目源代码

    java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥  Java生成密钥、保存密钥的实例源码...

    HttpClient模拟登陆源码 pjYzm.zip

    工程里的入口类为:mnLogin.java ,由于模拟登陆的网站,使用了自签名的SSL证书,所以新增两个方法,创建HttpClient不校验服务端证书,后台通过调用登陆接口,获得返回的cookie信息,在使用登陆成功获得cookie,调取...

    JAVA上百实例源码以及开源项目

    java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥  Java生成密钥、保存密钥的实例源码...

    模拟登陆51job智联 包括验证码的破解

    模拟登陆51job 智联 包括验证码的破解 可运行

    【Java】—模拟银行存取款业务(项目报告已上传)

    本项目的主要功能是模拟银行的存取款业务,当用户登录时需判断银行卡号和银行卡密码,当输入的卡号和密码都正确时,登录成功,提示当前登录的账户名,并进入下一步选择操作类型。操作类型包括四种(存款:1 取款:2 ...

    用java web实现的在线模拟考试系统

    该系统主要实现了模拟在线考试功能,其使用方法如下 软件安装 1、 安装Oracle9.0.2 (1) 创建数据库: 操作方法:根据提示安装,一般的步骤点击下一步即可,在创建数据库时输入数据库名称,例如dbhouse; (2) ...

    Java实现自动取款机模拟程序

    一、 课程设计名称及内容 ...(4) 取款和存款操作,有操作结果提示,如“操作成功”或“余额不足,操作失败”等。 4. 界面尽可能模仿自动取款机的实际界面。 5. 对于失败操作,尽可能采用异常捕捉的机制来完成。

    Jsoup+httpclient 模拟登陆和抓取

    Jsoup+httpclient 模拟登陆和抓取页面 package com.app.html; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader...

    登录验证,只有三次机会,输入特定的用户名和密码后显示登陆成功

    内容概要:简单登录验证,只有3次输入机会,第4次时自动退出(当然,这可以自己设定,本资源只...适合人群:新手小白,和我一起学习JAVA 学会什么:输入输出语句、for循环控制语句、if-else条件控制语句、写代码的勇气

    模拟ATM柜员机系统--连接数据库

    这个是用JAVA写的ATM项目,界面完全是用代码设计的,在 Jcreator 中,绝对能运行! 本项目是连上数据库的,本人已经附上了一个数据库文件,里面还有数据库的连接图,一步步交会你如何连接数据库。 还附上了课程设计...

    QZoneLogin:Java实现,模拟QQ空间登录,并获取QQCookie

    QZoneLogin java实现,模拟QQ空间登录,获取QQCookie 主要获取skey cookie,如需获取其他cookie,请自行修改 public class Main { public static void main... System.out.println("登陆成功"); qq.getCookie().forE

    java课程设计-自动取款机模拟程序

    含论文和源代码!...(4)取款和存款操作,有操作结果提示,如“操作成功”或“余额不足,操作失败”等。 4、界面尽可能模仿自动取款机的实际界面。 5、对于失败操作,尽可能采用异常捕捉的机制来完成。

    Java GUI编程.docx

    1.设置一个置项的模拟窗体,窗体标题栏具有标志性QQ图标和标题文字,不可改变大小,初始运行时显示在屏幕中央。 2.使用标签组件显示提示文字(或logo...利用JOptionPane.showConfirmDialog显示登陆成功或者失败对话框。

    大学java自动取款机模拟程序

    二、 课程设计名称及内容 ...(4) 取款和存款操作,有操作结果提示,如“操作成功”或“余额不足,操作失败”等。 4. 界面尽可能模仿自动取款机的实际界面。 5. 对于失败操作,尽可能采用异常捕捉的机制来完成。

    ubk_weiboSpider:新浪微博模拟登陆2015

    ##新浪微博模拟登陆DEMO详细步骤查看src/main/java/com/unbank/weibo/login/WeiboLoginByHttpClinet.java即可###第一步:访问 使得Cookie 里包含login_sid_t ,TC_Ugrow_G0###第二步:获取servertime ,pcid,pubkey...

    Java毕业设计:基于SpringBoot的房产销售管理系统的模拟与实现(源码+文档+录像演示).zip

    基于B/S架构的房产销售管理系统的模拟与实现 CRM Java MySQL B/S架构 系统采用B/S架构,基于Java进行搭建,帮助房地产企业保持稳定、健康的可持续性发展的信息化管理软件。 注册登陆功能 用户通过系统提供的注册...

    学生大作业-病人挂号系统网站 java.zip

    实验六 病人挂号系统 要求:命名规范,详细记录实验步骤及实验结果截图,填写实验报告,提交程序文件夹(报告截图及代码)【实验目的】 ...10)使用蚂蚁金服公共开放平台的沙箱环境模拟挂号费支付。 11)实验难点概述。

Global site tag (gtag.js) - Google Analytics