本人想用JAVA实现sina博客发文章:
目前流程:
1.通过HttpClient实现sina博客认证
2.通过HttpClient实现sina博客发文章上面操作问题:
过程1已经通过
过程2好像重新开启会话请求
我如何把认证和发贴请求搞到一个会话中去谢谢指点 

解决方案 »

  1.   

    读取第一次返回的cookie 第二次再发过去。OVER
      

  2.   

    我现在把我的代码贴上去,希望高人帮我分析一下        // 构造HttpClient的实例
    HttpClient httpClient = new HttpClient();

    String url = "http://login.sina.com.cn/hd/signin.php";
    PostMethod postMethod = new PostMethod(url);
            // 填入各个表单域的值
                //设置sina博客用户名
    NameValuePair[] data = { new NameValuePair("username", "bishimianshi"),
              //设置sina博客密码
    new NameValuePair("password", "007521"),
              //设置其他字段
    new NameValuePair("entry", "blog"),
    new NameValuePair("act", "1"),
    };
    // 将表单的值放入postMethod中
    postMethod.setRequestBody(data);
    // 执行postMethod
    int statusCode;
    try {
    // HttpClient对于要求接受后继服务的请求,象POST和PUT等不能自动处理转发
    statusCode = httpClient.executeMethod(postMethod);
    System.out.println("statusCode:"+statusCode);

    //获取第一次请求返回的头部
     Header[] heard = postMethod.getResponseHeaders();
     System.out.println("====================heard======================");
                for(int i = 0;i<heard.length; i ++)
                {
                  System.out.println(heard[i].getName()+"||"+heard[i].getValue());
                }
                System.out.println("====================heard======================");

            //获取第一次请求返回的内容
            byte[] responseBody = postMethod.getResponseBody();
    System.out.println("=================body============");    
    System.out.println(new String(responseBody));
    System.out.println("=================body============");

    } catch (HttpException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }sina认证通过之后,根据返回的信息,接下来是一个跳转页面,跳转的页面是根绝window.location.replace("xxxxxxxxxxxx");实现的。跳之后才是我的sina博客的内容,我改如何发帖呢。谢谢高手。、
      

  3.   


    // 构造HttpClient的实例 
    HttpClient httpClient = new HttpClient(); String url = "http://login.sina.com.cn/hd/signin.php"; 
    PostMethod postMethod = new PostMethod(url); 
            // 填入各个表单域的值 
                //设置sina博客用户名 
    NameValuePair[] data = { new NameValuePair("username", "bishimianshi"), 
              //设置sina博客密码 
    new NameValuePair("password", "007521"), 
              //设置其他字段 
    new NameValuePair("entry", "blog"), 
    new NameValuePair("act", "1"), 
    }; 
    // 将表单的值放入postMethod中 
    postMethod.setRequestBody(data); 
    // 执行postMethod 
    int statusCode; 
    try { 
    // HttpClient对于要求接受后继服务的请求,象POST和PUT等不能自动处理转发 
    statusCode = httpClient.executeMethod(postMethod); 
    System.out.println("statusCode:"+statusCode); //获取第一次请求返回的头部 
    Header[] heard = postMethod.getResponseHeaders(); 
    System.out.println("====================heard======================"); 
                for(int i = 0;i <heard.length; i ++) 
                { 
                  System.out.println(heard[i].getName()+"||"+heard[i].getValue()); 
                } 
                System.out.println("====================heard======================");         //获取第一次请求返回的内容 
            byte[] responseBody = postMethod.getResponseBody(); 
    System.out.println("=================body============");   
    System.out.println(new String(responseBody)); 
    System.out.println("=================body============"); } catch (HttpException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
      

  4.   

    关注这个帖子, 目前在学习HttpClient4.0,静候HttpClient高手出炉
      

  5.   

    我帮你找了一篇帖子, 只不过是在校内网发博客的代码:http://blog.csdn.net/greatwall_sdut/archive/2009/03/14/3988729.aspx另外, 用ieHttpHeader这样一个工具可以帮你截获包, 可能对你分析页面有帮助.有什么成果一起分享一下,我对这个有点兴趣....
      

  6.   

    我记得以前我抓取的时候,2次请求用同一个httpClient实例的话,好像可以保证在同一个session里
      

  7.   

    httpClient可以帮你保存会话,你只要用的时候不把前面的关闭就可以了
    有时间可以去我的JAVAEYE看看那4篇文章
    http://zhoujingxian.javaeye.com/category/74680这次的项目就是用的HttpClient维护的登录模块
      

  8.   

    稍稍修改应该就可以
    先说下思路
    postMethod.getResponseHeaders() 获取HTTP头部, 在头部中保存着Cookie值, 把这个值存下来, 下次发送时再把这个值赋进去HTTPClient好像自己本身可以存这个值,只要是在同一个socket中, 好久不用,记不清了.
      

  9.   

    用同一个httpclient 管用,谢谢我刚实验了
      

  10.   

    把认证通过后的httpclient保存到session中,后面需要用到的时候再从session中取出来就OK了。