做毕业设计需要下载一些数据,因此并没有深入学过这方面的东西,技术比较弱,小女子先要谢谢各位技术达人的热情帮助程序部分老早就写好了,一直很OK,今天TEST的时候,忽然就不行了。
先用POSTMETHOD自动登陆,打印出getResponseBodyAsString后,发现登陆成功了。
然后用GETMETHOD访问一个页面,打印出getResponseBodyAsString后,发现是登陆状态并且页面跳转成功了。
接着用GETMETHOD访问不同一个页面(同一个页面也试过,不行),打印出getResponseBodyAsString后,虽然还是能得到页面内容,但却没有登陆信息了。发现,虽然自动登陆成功,并能成功的GETMETHOD一次,但第二次GETMETHOD肯定就不行了晕这是什么原理啊
我想是不理和HTTPCLIENT在GETMETHOD一次后,里面的参数发生了什么变化???纯瞎猜,这方面我太白痴了。多奇怪啊,以前用这个程序获取数据的时候是没有问题的,我GETMETHOD几次都没问题
我想是不是网站限制了呢?因为做课程设计需要一些数据支持,所以哎,而且现在换数据太麻烦了。效果肯定会掉下一大截。大家对于这种现象,有没有什么建议和想法请大家帮帮我吧~~~~神啊。

解决方案 »

  1.   

    代码大致如下:public static void main(String[] args) throws Exception     
      {     
      HttpClient client = new HttpClient();   
      client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
      client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT);     
      
        //登录     
        PostMethod post = new PostMethod("/login"); 
        post
    .setRequestHeader(
    "User-Agent",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.4.154.25 Safari/525.19");    NameValuePair username = new NameValuePair("email", "××××");     
        NameValuePair password = new NameValuePair("password", "××××"); 
        NameValuePair rem = new NameValuePair("remember", "yes");    
        post.setRequestBody(new NameValuePair[] { username, password,rem });     
        client.executeMethod(post);     
        String responseString = new String(post.getResponseBodyAsString().getBytes(     
            "gbk"));       
        System.out.println(responseString);     
        Cookie[] cookies = client.getState().getCookies();     
        client.getState().addCookies(cookies);     
        post.releaseConnection();  
       
        //以get方式请求跳转页面,第一次成功     
        GetMethod get = new GetMethod("网页一次");  
        get.setRequestHeader("Accept-Language", "zh-cn");
        get.setRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 2.0.50727)");
        get.setRequestHeader("Host", "www.douban.com");
        get.setRequestHeader("Connection", "Keep-Alive");
        get.setRequestHeader("Cookie", cookies.toString());     
        client.executeMethod(get);        
        responseString = new String(get.getResponseBodyAsString().getBytes("gbk"));         
        System.out.println(responseString);     
        get.releaseConnection();      cookies = client.getState().getCookies();     
        client.getState().addCookies(cookies);    //以get方式请求跳转页面,第二次却失败了!!! 
        get = new GetMethod("网页两次");
        get.setRequestHeader("Accept-Language", "zh-cn");
        get.setRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 2.0.50727)");
        get.setRequestHeader("Host", "www.douban.com");
        get.setRequestHeader("Connection", "Keep-Alive");
        get.setRequestHeader("Cookie", cookies.toString());       
        client.executeMethod(get);     
        responseString = new String(get.getResponseBodyAsString().getBytes("gbk"));         
        System.out.println(responseString);     
        get.releaseConnection();     
      }
      

  2.   

    为何要new个GetMethod,直接用原来那个get不行吗
      

  3.   

    是不是网站管理session的方式发生了变化?看看这几篇:
    http://www.nabble.com/Session-handling-in-HttpClient-td18106268.html
    http://www.velocityreviews.com/forums/t137578-keeping-session-alive-using-jakarta-httpclient.html
      

  4.   


    不行啊,我换成client.executeMethod(get); 
        try {
    Thread.currentThread().sleep(1000);
    } catch (InterruptedException e) {
    }
    client.executeMethod(get); 同一个GET,执行两次executeMethod,第一次成功,第二次还是不成功。而且我发现不是肯定不成功,偶尔第二次是带有登陆信息的,决大数时候都会告诉我没有权限访问,因为只有登陆的用户才可以访问啊。