代表用户输入capthca值

时间:2012-06-10 16:37:21

标签: java java-ee

我有一种情况:我在服务器上部署的Java程序从一个网站上获取一个页面,该网站有一个验证码图像。图像将显示给最终用户,最终用户将输入验证码的值并将该页面提交给服务器。服务器将该值提交给主网站。

我已经尝试使用http客户端,但在提交时,它表示无效的图像值。

请帮帮我。  用于显示用户capthca图像的代码

HttpClient hc=new HttpClient();
GetMethod gm=new GetMethod("https://abc.com/register");
int sta=hc.executeMethod(gm);
String line=gm.getResponseBodyAsString();

    urlStr="https://abc.com/captchaImage";
    URL url=new URL(urlStr);
    BufferedImage img1 = ImageIO.read(url);
    ImageIO.write(img1, "jpg", out);

向abc.com提交请求

HttpClient hc=new HttpClient();
PostMethod hm=new PostMethod("https://abc.com/submit");
hm.addParameter("pwd","Asdf@123456" );
hm.addParameter("confirmPwd","Asdf@123456");
hm.addParameter("hintQues","Birth+City");
hm.addParameter("hintAns","fdgf");
hm.addParameter("captchavalue",request.getParameter("cap"));
hm.addParameter("register","Register");
int returnCode = hc.executeMethod(hm);
out.println(hm.getResponseBodyAsString());

1 个答案:

答案 0 :(得分:4)

我还没有分析abc.com的注册工作方式,但我敢打赌,它使用了一些隐藏字段(我在代码中看不到任何参数),或者使用cookie记住哪些验证码显示给用户,从而验证浏览器发送的验证码值是否正确。

由于您没有发送隐藏字段值,并且因为您正在使用全新的HttpClient实例,所以您要向服务器发送验证码值,但它无法知道您是哪个验证码发送此值,因此无法验证它。

尝试重用与用于从服务器获取注册页面的HttpClient相同的实例。这样,存储在HttpClient状态中的cookie将被发送回服务器。