HttpClient如何让服务器知道是哪个session

awusoft 2011-01-04 01:05:06
有一个网站,是用来查询的,输入一个单号,上边有验证码的.查了很多的验证码破解的都没有成功,就想到手动输入验证码,想使用httpclient来实现
先用httpclient访问,再访问其中生成验证码图片的servlet,得到图片,保存到服务器上,显示出来,浏览中输入验证码,然后再使用httpclient提交.
两次的提交是如何让这个网站知道是两次是同一个会话呢?附加Cookie吗?要怎么加呢?
以下为相关的一些代码

import java.io.IOException;

import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.PostMethod;

public class HttpClientTest1 {
public static void main(String[] args) {
HttpClient client = new HttpClient();
String url = "首页地址";//得到sessionID
PostMethod method = new PostMethod(url);
method.getParams().setCookiePolicy(CookiePolicy.RFC_2109);
try {

client.executeMethod(method);
String body = method.getResponseBodyAsString();
System.out.println(body);
Cookie[] cookie = client.getState().getCookies();
url = "提交URL";
method = new PostMethod(url);
for(int ii=0;ii<cookie.length;ii++)
{
Cookie cook = cookie[ii];
client.getState().addCookie(cook);
}
method.getParams().setCookiePolicy(CookiePolicy.RFC_2109);
body = method.getResponseBodyAsString();
System.out.println("----"+body);
} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

...全文
1119 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
过客尔 2013-08-19
  • 打赏
  • 举报
回复
看看这篇文章:http://observer.blog.51cto.com/4267416/1275608
yayalyn 2011-07-07
  • 打赏
  • 举报
回复
遇到同样问题 顶一下
checktime 2011-07-01
  • 打赏
  • 举报
回复
LS session 不是保存在服务器里面吗,在客户端怎么修改session啊!!!!



LZ httpclient的文档有说只要成功登陆后(也就是通过输入账号,密码验证码之后),用同一个HTTPCLIENT 就能像访问普通页面一样访问其他受限页面,httpclient会帮用户处理cookie的问题,
ffcsrdc 2011-02-12
  • 打赏
  • 举报
回复
其实最简单的办法就是生成验证码后把httpclient保存到session中,提交时再从session中取出这个httpclient就行了,因为本身httpclient里面就带有cookie信息了。
awusoft 2011-01-05
  • 打赏
  • 举报
回复
实现就是访问一些查询的网站得到Cookie,然后将Cookie里的值保存起来,第二次传验证码的时候再将这些值构造成Cookie再传过去.
magong 2011-01-04
  • 打赏
  • 举报
回复
想想也不奇怪,Session本来就是用Cookie实现的。
eXeSP 2011-01-04
  • 打赏
  • 举报
回复
楼主自己把问题解决了...那么散散分如何^^
Jlins 2011-01-04
  • 打赏
  • 举报
回复
可以共享一下 呵呵,给后来 搜索进来的人一点便捷和希望[Quote=引用 4 楼 awusoft 的回复:]

不附加的话恐怕不行吧.第一次使用HttpClient来得到session,后边访问生成验证码的servlet,需要在同一个session中吧.然后将验证码图片显示在自己的应用中,这时候那个httpClient已经不在了,当用户操作完后再传验证码过去,肯定要同一个session才行啊.但此时是新的HttpClient.不附加Cookie的话,使用什么技术,让那个查询的网站知道是哪个session的……
[/Quote]
awusoft 2011-01-04
  • 打赏
  • 举报
回复
不附加的话恐怕不行吧.第一次使用HttpClient来得到session,后边访问生成验证码的servlet,需要在同一个session中吧.然后将验证码图片显示在自己的应用中,这时候那个httpClient已经不在了,当用户操作完后再传验证码过去,肯定要同一个session才行啊.但此时是新的HttpClient.不附加Cookie的话,使用什么技术,让那个查询的网站知道是哪个session的?
我的问题已经解决了,就是通过附加Cookie.
zhoujingxian 2011-01-04
  • 打赏
  • 举报
回复
不用附加COOKIE,HttpClient自己能管理session,多看下API,具体怎么弄的,我得仔细找原来的代码
awusoft 2011-01-04
  • 打赏
  • 举报
回复
同一个httpclient是可以了,跨HttpClient处理不好.
在自己的应用中,先是创建一个httpclient来得到session id,生成验证码图片,然后在浏览器上显示
当数据提交的时候,又要一个创建一个httpclient,将验证码提交回去.
牛肉胡辣汤 2011-01-04
  • 打赏
  • 举报
回复
的确是个纠结的问题,
把你的一个HttpClent对象当作是一个浏览器。是在同一个浏览器中。所以在HttpClient对象也要是同一个对象。
  后来发现是HttpClient实例自己会处理Cookie

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧