读书人

HttpClient突破验证码提交数据有关问题

发布时间: 2012-01-29 21:39:32 作者: rapoo

HttpClient突破验证码提交数据问题
验证码识别已经搞定
但是登陆的时候仍然说验证码错误

PostMethod authpost = new PostMethod( "/login ");

NameValuePair user = new NameValuePair( "user ", "user ");
NameValuePair psw = new NameValuePair( "pass ", "psw ");

String strConfirm = ImageOrc.getText( "http://localhost/confirm ");
NameValuePair cfm = new NameValuePair( "confirm ",strConfirm ");

authpost.setRequestBody(new NameValuePair[] {user,psw,cfm});
client.executeMethod(authpost);


getText方法:

public String getText(String url)
{
BufferedImage imd;
StringBuffer sb = new StringBuffer( " ");
try {
imd = ImageIO.read(new URL(url));// 用ImageIO的静态方法读取图像
ImageIO.write(imd, "BMP ", new File(file));

} catch (Exception ex) {
ex.printStackTrace();

}

String sk=Icp.creak(file);
return sk;
}


每次返回都说验证码不成功。
验证码是存在session里面的,
图片识别也是100%

这里可能是什么问题?
请大家指点一下


网上看了很多资料说
String strConfirm = ImageOrc.getText( "http://localhost/confirm ");
这句代码的session和你登陆的session不是同一个。
要用同一个client去取。才能保证在一个session里面

但是这个URL是用new URL(url)来生成图片的。如何获得此Session?
我测试过。整个过程的sessionID都是一致的。。不知道问题出在哪儿。请高手指点

[解决办法]
注意几点:

1.你的Client每获取一次图片的url,验证码就重新生成一次。
2.验证码只对应你当前的session,如果你另起一个连接去取,那么另一个连接是另外一个session ID,不是你当前登陆页面的这个。
[解决办法]
你应该获取当前页面的session。然后使用该session去访问图片URL(使用jsessionid参数)。这样获得的图片验证码就和你当前页面一致了。
[解决办法]
还有个问题。也希望兄弟解答下。刚遇到的。很急。。。。


用HttpClient实验新浪登陆
返回结果是登陆成功。但是进入一个后台管理页。就又回到了登陆页了。以下是源码

//1。登陆
PostMethod post = new PostMethod( "http://blog.sina.com.cn/login.php?url=http://blog.sina.com.cn/control/ ");
NameValuePair[] data = {
new NameValuePair( "loginname ", username),
new NameValuePair( "passwd ", password)};
post.setRequestBody(data);
int codeState = http.executeMethod(post);
post.releaseConnection();

//2。登陆成功以后 我想马上跳到后台管理页

String titileSendView= "http://blog.sina.com.cn/control/ ";

GetMethod getMethod = new GetMethod(titileSendView);


int statusCode = http.executeMethod(getMethod);


其中第一步返回结果是
<script language= "javascript " type= "text/javascript "> top.window.location.href = "http://blog.sina.com.cn/control/writing/scriber/article_add.php?mode=1 "; </script>

而第2步返回的结果依然是 登陆页面。http 对象是同一个啊。请指点。



[解决办法]
..
[解决办法]
请问你到底想干什么?
[解决办法]
请问楼主PostMethod 是哪里的类啊? api里没有查到
学习一下
[解决办法]
验证sina通过就说明你这没问题了,门户网站有自己的权限控制平台,不是破解一下登陆就行的
[解决办法]
1.HttpClient 是模拟了一个客户端
2.Session是在服务器端的.
3.sessionID从你打开页面后就是一个ID号.
如果你都已经得到验证码了,直接提交就得到了,不要在打开(刷新)页面了.

读书人网 >Java Web开发

热点推荐