先说下Sina博客流程:希望大家一起研究
1.sina博客认证
2.跳转页面
3.博客页面具体操作:
1.sina博客认证
    // 构造HttpClient的实例
HttpClient httpClient = new HttpClient();

String url = "http://login.sina.com.cn/hd/signin.php";

PostMethod postMethod = new PostMethod(url);

// 填入各个表单域的值
NameValuePair[] data = 

new NameValuePair("username", "bishimianshi"),
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);
    Cookie[] cookies = httpClient.getState().getCookies();
    for (int i = 0; i < cookies.length; i++) 
    {
   
System.out.println("cookie:" + cookies[i].toString());

    }
byte[] responseBody = postMethod.getResponseBody();
System.out.println("=================body============");
System.out.println(new String(responseBody));
System.out.println("=================body============");
这个过程之后返回的结果为:
下面为认证请求之后返回的cookiecookie:SUE=es%3Dcc397dc6279cf69e158580d9f70841de%26ev%3Dv0
cookie:SUP=cv%3D1%26bt%3D1251128375%26et%3D1251214775%26uid%3D1605674171%26user%3Dbishimianshi%26ag%3D2%26nick%3D%25E4%25B8%2580%25E5%2588%2587%25E9%259D%25A0%25E8%2587%25AA%25E5%25B7%25B1%26sex%3D1%26ps%3D0%26dob%3D1986-08-01返回的消息体为:=================body============ <html>
<head>
<title>sso redirect</title>
<meta http-equiv="refresh" content="0; url=&#39;http://blog.sina.com.cn/u/1605674171&#39;">
</head>
<body bgcolor="#ffffff" text="#000000" link="#0000cc" vlink="#551a8b" alink="#ff0000">
<script type="text/javascript" language="javascript">
location.replace("http://blog.sina.com.cn/u/1605674171");
</script>
</body>
</html>
=================body============由此可以看出认证之后接着是一个跳转页面:http://blog.sina.com.cn/u/1605674171下面的过程就是再次请求这个跳转页面:http://blog.sina.com.cn/u/1605674171
代码:(下面代码是和上面的代码连在一起的,方便分开研究)                        //请求跳转页面http://blog.sina.com.cn/u/1605674171
postMethod.releaseConnection();
postMethod =new PostMethod("http://blog.sina.com.cn/u/1605674171");
如何把第一获取的cookie设置在此次的请求中?????
statusCode = httpClient.executeMethod(postMethod);
Cookie[] cookies1 = httpClient.getState().getCookies();
for (int i = 0; i < cookies1.length; i++) {
System.out.println("cookie:" + cookies1[i].toString());
}

byte[] responseBody1 = postMethod.getResponseBody();
System.out.println("=================body1============");
System.out.println(new String(responseBody1));
System.out.println("=================body1============");
上面的请求执行,根据返回的信息判定需要再次认证。正常的执行流程上述的请求应该不要再次认证,直接进入BOLG了。
问题应该出在cookie的传递,
希望高手在cookie传递方面指点。谢谢
还一个问题,一般在httpClient请求的过程中,需要设置Header的其他字段属性吗???

解决方案 »

  1.   

    SUE=es%3Dcc397dc6279cf69e158580d9f70841de%26ev%3Dv0
    SUP=cv%3D1%26bt%3D1251128375%26et%3D1251214775%26uid%3D1605674171%26user%3Dbishimianshi%26ag%3D2%26nick%3D%25E4%25B8%2580%25E5%2588%2587%25E9%259D%25A0%25E8%2587%25AA%25E5%25B7%25B1%26sex%3D1%26ps%3D0%26do当做两个参数传过去.有些网站如果没有header无法访问.sina就不知道了.
    如果设置就参考这个吧.
    HttpClient client = new HttpClient();
    client.getParams().setParameter(HttpMethodParams.USER_AGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
    client.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
      

  2.   

    当然需要设置header了,有的系统专门这么设置的
      

  3.   

    ni 你cookie都没传啊
    当然要认证了
    可以用 字符串方式
    也可以用cookie实体的方式传
    具体什么方式看服务器返回的header来确定吧
    字符串:setRequestHeader("Set-Cookie", cookieStr);
    cookieStr你根据网站自己判断是什么格式的吧
    实体方式就client.getState().addCookies(你的cookie);
    最好在client实例化后设定cookie范围,具体什么范围就多尝试几次,
    client.getParams().setCookiePolicy(CookiePolicy.******);
    很简单