`
nanjingjiangbiao_T
  • 浏览: 2621253 次
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

HttpClient成功登录新浪微博之简单分析与实践

 
阅读更多

用的触屏版新浪微博的登录地址: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了,有什么好的想法大家一起交流。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics