0

我有一种情况:我部署在服务器上的 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());
4

1 回答 1

4

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

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

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

于 2012-06-10T17:22:51.543 回答