httpclient模拟手机微博登录问题

饶培泽 发布于 2012/06/13 14:00
阅读 2K+
收藏 0

由于项目需要提取微博的数据,新浪的API有访问限制,所以想用httpclient模拟登陆,由于web网页的信息貌似用的JSON,我不会解析。所以转向wap页面的解析,参照http://blog.csdn.net/pf1492536/article/details/6689525 登录遇到问题

	public static boolean Login(String username, String password)
			throws IOException {
		String getgsid = null;
		HttpClient httpclient = new DefaultHttpClient();

		String content = "http://3g.sina.com.cn/prog/wapsite/sso/login.php";
		Document doc = Jsoup.connect(content).get();
		Element form = null, pwnd = null, vk = null;
		String rand = null, spwnd = null, svk = null;
		form = doc.select("go[method=post]").first();
		pwnd = doc.select("postfield[value=$(password)").first();
		vk = doc.select("postfield[name=vk]").first();
		if (form == null || pwnd == null || vk == null)
			return false;

		rand = form.attr("href");
		spwnd = pwnd.attr("name");
		svk = vk.attr("value");
		if (rand == null || spwnd == null || svk == null)
			return false;
		String gsid = null;
		try {
			String url = "http://3g.sina.com.cn/prog/wapsite/sso/" + rand;
			HttpPost post = new HttpPost(url);
			post.setHeader("User-Agent",
					"Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1");
			post.setHeader("Referer", "http://3g.sina.com.cn/prog/wapsite/sso/login.php?ns=1&backURL=http://weibo.cn/dpool/ttt/home.php?s2w=login&backTitle=新浪微博&vt=");
			post.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

			List<NameValuePair> qparams = new ArrayList<NameValuePair>();
			qparams.add(new BasicNameValuePair("mobile", username));
			qparams.add(new BasicNameValuePair(spwnd, password));
			qparams.add(new BasicNameValuePair("remember", "on"));
			qparams.add(new BasicNameValuePair("backURL",
					"http://weibo.cn/dpool/ttt/home.php?s2w=login"));
			qparams.add(new BasicNameValuePair("backTitle", "新浪微博"));
			qparams.add(new BasicNameValuePair("vk", svk));
			qparams.add(new BasicNameValuePair("submit", "登录"));
			UrlEncodedFormEntity params = new UrlEncodedFormEntity(qparams,
					"UTF-8");
			post.setEntity(params);
			HttpResponse response = httpclient.execute(post);

			List<Cookie> cookies = ((AbstractHttpClient) httpclient)
					.getCookieStore().getCookies();
			if (cookies.size() != 0)
				getgsid = cookies.get(0).getValue();
			else
				getgsid = null;
			gsid = getgsid;

		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (gsid == null)
				return false;
			else
				return true;
		}
	}

但解析不成功,各位大大,看下问题出在哪里,谢谢了!

 

加载中
0
每周精粹
每周精粹

“但解析不成功”

什么意思 是不是 有  html   的标签

这里 他不会解析 html 的标签 的。得到后 使用 jsoup 来解析 。可以 获得 内容》

0
每周精粹
每周精粹
我也想问一下 使用 这个 httpclient 如何 保持 会话,也就是 登陆 后才能 看到的 内容!!
0
W
WuBillion
你的访问的域名有问题,不应该是3g.sina.cn,你要获取weibo.cn的话是要从weibo.cn返回cookies

我用的c#写的weibo.cn参照你的改的,但是也遇到取得cookies数值正确但是无法访问的问题,最后发现原因是cookie的Domain是错的,按照你这个得到的是.sina.cn,实际上.weibo.cn才是正确的

返回顶部
顶部