初步了解了一下HttpClient,需求是对一个系统进行登陆,然后下载指定URL的内容        PostMethod post = new PostMethod( "xxxxx/checkLogin.aspx" );
但对第二个地址进行连接的时候
post = new PostMethod( "xxxxx/downLoad.aspx?file=xxx" ); 这样会话就丢失了,不知道这个怎么弄了,因为比较急,没有时间多研究。所以请高手指教了。
网上说把cookie再发回去,试了。不管用

解决方案 »

  1.   

    HttpPost post=new HttpPost(""xxxxx/downLoad.aspx?file=xxx""+"&"+sessionID);
    加上这个sessionId;
    SessionId的获得 HttpContext localContext = new BasicHttpContext();
    --放入post对象和context对象获得response
            HttpResponse  _response2 = httpclient.execute(post, localContext);
            CookieStore store2 = httpclient.getCookieStore();
            List list2 = store2.getCookies();
         String  sessionId = "";
            for (int i = 0; i < list2.size(); i++) {
                Cookie cookie = (Cookie) list2.get(i);
                String cookieName = cookie.getName();
                if (cookieName.equals("JSESSIONID")) {
                    sessionId = cookie.getValue();
                    break;
                }
            }
      

  2.   

    获取上一次请求的session cookie后,要把这个session cookie随下一次请求一起发送以维持会话session cookie可以通过加在Cookie这个头域中发送(httpclient通过cookie store来管理)。HttpPost httppost = new HttpPost(postData); 
    CookieStore cookieStore = new BasicCookieStore(); 
    BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", getSessionId());
    //cookie.setDomain("your domain");cookie.setPath("/");cookieStore.addCookie(cookie); 
    client.setCookieStore(cookieStore); 
    response = client.execute(httppost); 
      

  3.   

    httpclient会自动维护cookie,只要是用的一个httpclient就应该可以的吧.....
      

  4.   

    cookie不管用的话有很多其它原因的还要具体分析
    比如cookie的域等是否与请求地址匹配,网站维持会话的方式是否非session cookie,用referer之类的
      

  5.   


    访问第二个地址的时候,现在是new了一下,
      

  6.   


    一个HttpClient对象,就可以理解为浏览器的一个进程。如果是同一个进程后续的请求,Cookie应该会自动发过去的。如果你重新又创建了一个新的HttpClient这时就相当于开了2个浏览器进程。2个进程是不相关的。