先说下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='http://blog.sina.com.cn/u/1605674171'">
</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.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='http://blog.sina.com.cn/u/1605674171'">
</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的其他字段属性吗???
解决方案 »
- 使用google web toolkit有什么好处。
- 求救!!!Eclipse打包jar后运行报错!!!
- 有关DataOutputStream输出流的问题,谢谢
- java编程思想4版上关于正则表达式的小问题
- 刷PV软件
- 求救!!谢谢。我上学期写了个内网聊天程序,我有2个寝室在用,我现在想加入语音聊天部分,请问各位有涉及这方面朋友,语音的采集,传输
- RandomAccessFile的问题
- 散分——怎么让还处于编辑状态的编辑框给表格赋值?
- IDE
- About Websphere? too boring..
- 【求助】java如何获取到可执行文件的(如exe文件)版本号
- 使用CXF发布Rest服务,出现read time out错误!!!!
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");
当然要认证了
可以用 字符串方式
也可以用cookie实体的方式传
具体什么方式看服务器返回的header来确定吧
字符串:setRequestHeader("Set-Cookie", cookieStr);
cookieStr你根据网站自己判断是什么格式的吧
实体方式就client.getState().addCookies(你的cookie);
最好在client实例化后设定cookie范围,具体什么范围就多尝试几次,
client.getParams().setCookiePolicy(CookiePolicy.******);
很简单