当前有一个网站,用户登录时必须要输入用户名,密码以及验证码,我使用HttpClient通过在客户端输入用户名和密码的方式直接登录中后台,现在的问题是我没法读取验证码,验证码是随机生成的,请问我应该如何解决这个问题,请各位大侠们帮我考虑考虑,不胜感谢!!

解决方案 »

  1.   

    当运行主方法时,我是首先通过生成验证码的链接地址得到验证码数据,同时显示JLABEL中,然后在文本框中分别输入用户名,密码,验证码,点击登录,抓取的信息显示验证码出错,我想服务器上的验证码信息存在SESSION中的,请问有什么好的方法.
      

  2.   

    部分代码如下:得到验证码:
    httpClient.executeMethod(method);
    if (method.getStatusCode() == HttpStatus.SC_OK) {
    InputStream response = method.getResponseBodyAsStream();
    byte[] b = new byte[4096];
    int length = -1;
    if ((length = response.read(b)) != -1) {
    ImageIcon icon = new ImageIcon(b);
    randImg.setIcon(icon);
    }
    }
    登录代码:
    GetMethod method = new GetMethod(url+"&testcode="+randInput.getText());
    int statusCode = 0;

    System.out.println("登录中......");
    statusCode = httpClient.executeMethod(method);
    String result = method.getResponseBodyAsString();
    System.out.println(result);
    System.out.println(statusCode);
      

  3.   

    我解决了,想通了其实很简单,
    每一次NEW一个HttpClient相当于新生成一个session id,
    但如果每次都用同一个HttpClient相当于共同一个session id
    既然是同一个ID,验证码自然就是同一个验证码了,
    之前主要对HttpClinent没有深入了解它,
    还好没浪费太多时间去解决!!
      

  4.   

    当运行主方法时,我是首先通过生成验证码的链接地址得到验证码数据,当然有SESSIONID 了, 每个验证码都是和这个关联的, 你的从返回的数据中,截获cookie 里面的
    JSessionID, 下次登录请求时,记得把这个cookie传过去。不过据说 httpClient 会自动处理这个,你是不是读取和登录用了不同的httpClient啊!
      

  5.   

    一个问题解决了,另一个问题又来了,还是关于HTTPCLIENT的,可能是网络的问题,有时候提交上去挺快的,而有时候就有些慢,像用户登录,帐号没问题,但也会出现登录不上的原因,而且提交后,响应时间也有时快,有时慢,必须在事件响应返回之后,才能够执行其它操作以上相关问题,大家有好的解决方案吗,
      

  6.   

    当运行主方法时,我是首先通过生成验证码的链接地址得到验证码数据, 当然有SESSIONID 了, 每个验证码都是和这个关联的, 你的从返回的数据中,截获cookie 里面的 
    JSessionID, 下次登录请求时,记得把这个cookie传过去。 不过据说 httpClient 会自动处理这个,你是不是读取和登录用了不同的httpClient啊!