用的触屏版新浪微博的登录地址:http://m.weibo.cn/login
需要用Firefox浏览器,要安装HttpFox工具,当然你也可以用其他插件,只要能分析HTTP协议即可。
用HttpFox分析登录过程中的头信息如下:
当然这些头信息不用全部设置,只需在代码中设置一些必要的信息:
post.setRequestHeader("User-Agent","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.77 Safari/537.1");
post.setRequestHeader("Referer", "http://weibo.com/");
post.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
post.setRequestHeader("Referer",http://m.weibo.cn/login?ns=1&backURL=http%3A%2F%2Fm.weibo.cn%2F&backTitle=%D0%C2%C0%CB%CE%A2%B2%A9&vt=4);
下面我们再来看一下Post Data,请求提交时需要的参数:
用户名和密码都是明文,这就比较简单了。在代码中设置相关参数:
post.setParameter("uname",username );
post.setParameter("pwd", pwd);
post.setParameter("check", "1");
post.setParameter("autoLogin", "1");
post.setParameter("backURL", "http://m.weibo.cn/");
post.setParameter("backTitle", "新浪微博");
登录成功后,会被重定向到http://m.weibo.cn/,可以在content里面查看响应结果。
完整代码如下:
/*****
* gsid是一个会话id,登录成功后做其他操作带着这个gsid即可。如转发微博
* @param username 微博用户名
* @param pwd 微博密码
* @return
*/
public static String getGsid(String username,String pwd)
{
String gsid = "";
PostMethod post = null;
try
{
post = new PostMethod("http://m.weibo.cn/login");
post.setRequestHeader("User-Agent","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.77 Safari/537.1");
post.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
post.setRequestHeader("Referer","http://m.weibo.cn/login?ns=1&backURL=http%3A%2F%2Fm.weibo.cn%2F&backTitle=%D0%C2%C0%CB%CE%A2%B2%A9&vt=4");
post.setParameter("uname",username );
post.setParameter("pwd", pwd);
post.setParameter("check", "1");
post.setParameter("autoLogin", "1");
post.setParameter("backURL", "http://m.weibo.cn/");
post.setParameter("backTitle", "新浪微博");
DefaultHttpParams.getDefaultParams().setParameter("http.protocol.cookie-policy", CookiePolicy.BROWSER_COMPATIBILITY);
HttpClient client = new HttpClient();
int status = client.executeMethod(post);
System.out.println("status=" + status);
Cookie[] cookies = client.getState().getCookies();
String s = new String(post.getResponseBody(), "UTF-8");
System.out.println("s===" + s);
for (int i = 0; i < cookies.length; i++)
{
System.out.println(cookies[i].getName() + ":"
+ cookies[i].getValue());
gsid = cookies[i].getValue();
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
post.releaseConnection();
}
return gsid;
}
发送微博和转发微博分析过程都差不多,但对于转发链接需要解码一下,具体内容下一次我们再具体来分析。
以前一直在blogjava混,现在正式转战csdn了,有什么好的想法大家一起交流。