0 0

httpclient请求得到的页面能否得到cookie0

如题,我用httpclient模拟登录以后得到了页面内容,我直接用我的servlet的response把内容write到页面的话httpclient里面cookie会不会也跟着写进去

问题补充:我用httpclient模拟登录CAS,cookie我是可以拿到的,关键是怎么把cookie放到后续请求当中,我现在实现的方式是直接redirect,然后再过滤器里面判断并添加CAS的cookie,但是在火狐里面只是看到请求里面有:
Set-Cookie
CASPRIVACY=true; Domain=hisome; Path=/cas/; Secure CASTGC=TGT-19-Lfh5AfNYuarcMgZ6u9L4MNuqzDDiga4p4Y6ickZeMbgHj0mrPp-cas01.example.org; Domain=hisome; Path=/cas/; Secure JSESSIONID=E9525B624DBBB21656269B7223FC28A2; Domain=hisome; Path=/cas; Secure
这些cookie并不是会话状态,请问怎么处理Set-Cookie并生成会话

问题补充:httpclient是模拟浏览器操作吧,是不是httpclient执行结束了以后相当于关闭浏览器,会话和cookie都会丢失?但是我模拟登陆的要求是吧后台执行的请求获得的会话纳入我的浏览器里面。现在的情况是我response.addCookie以后跳转到其他链接的时候filter总是检测不到cookie

问题补充:模拟登录的cookie里面的domain和path属性是不是相应的要变化呢?是否要换成代理登录的服务器的domain和path
2012年12月20日 10:43

8个答案 按时间排序 按投票排序

1 0

cookie 通过 CookieSpec cookiespec = CookiePolicy.getDefaultSpec();来查看

package http.demo; 
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.cookie.*;
import org.apache.commons.httpclient.methods.*;
/** 
* 用来演示登录表单的示例 
* @author Liudong 
*/
public class FormLoginDemo {
   static final String LOGON_SITE = "localhost" ;
   static final int     LOGON_PORT = 8080;
   public static void main(String[] args) throws Exception{
      HttpClient client = new HttpClient();
      client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT);
      // 模拟登录页面 login.jsp->main.jsp
      PostMethod post = new PostMethod( "/main.jsp" );
      NameValuePair name = new NameValuePair( "name" , "ld" );
      NameValuePair pass = new NameValuePair( "password" , "ld" );
      post.setRequestBody( new NameValuePair[]{name,pass});
      int status = client.executeMethod(post);
      System.out.println(post.getResponseBodyAsString());
      post.releaseConnection();
      // 查看 cookie 信息
      CookieSpec cookiespec = CookiePolicy.getDefaultSpec();
      Cookie[] cookies = cookiespec.match(LOGON_SITE, LOGON_PORT, "/" , false , client.getState().getCookies());
      if (cookies.length == 0) {
         System.out.println( "None" );
      } else {
         for ( int i = 0; i < cookies.length; i++) {
            System.out.println(cookies[i].toString());
         }
      }
      // 访问所需的页面 main2.jsp 
      GetMethodget=newGetMethod("/main2.jsp");
      client.executeMethod(get);
      System.out.println(get.getResponseBodyAsString());
      get.releaseConnection();
   }
}

2012年12月20日 11:20
0 0

手动保存,手动提交

2012年12月20日 22:58
0 0

我贴的连接

http://www.cnblogs.com/loveyakamoz/archive/2011/07/21/2113246.html
里已经有演示代码了啊
是用CookieStore来保存Cookie的

HttpClient httpclient = new DefaultHttpClient(); 
// 创建cookie store的本地实例
CookieStore cookieStore = new BasicCookieStore();
// 创建本地的HTTP内容
HttpContext localContext = new BasicHttpContext();
// 绑定定制的cookie store到本地内容中
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
HttpGet httpget = new HttpGet("http://www.google.com/"); 
// 作为参数传递本地内容 
HttpResponse response = httpclient.execute(httpget, localContext)

2012年12月20日 18:13
0 0

我记得要设置一个策略,让httpclient保存cookie的。支持一下!

2012年12月20日 17:39
0 0

第一次访问是有cookie返回的,后续你要将cookie添加到头上去。

2012年12月20日 12:52
0 0

http://www.cnblogs.com/loveyakamoz/archive/2011/07/21/2113246.html

最后一个
每个用户/线程的状态管理

2012年12月20日 12:16
0 0

我记得要设置一个策略,让httpclient保存cookie的。

2012年12月20日 12:12
0 0

servlet中要调用response.addCookie方法才能把cookie返回给客户端。write是写不了cookie的。

response.addCookie(new Cookie("name","value"));

2012年12月20日 11:37

相关推荐

Global site tag (gtag.js) - Google Analytics