HttpClient 4.1 登录小米官网记录登录状态访问其他页面 求高手解决!

Dream_of_you 2013-11-01 05:48:04
最近想买个米3 一直抢不到,想写个客户端来开启多线程抢小米,希望能增加抢到的几率。
本人研究了下,小米抢购排队页面每点一次“进入活动”触发的都是一个request请求
“http://tc.hd.xiaomi.com/hdget?callback=hdcontrol&_=1382425807810”,
而每次点击进入活动都得等个6秒,而且请求后服务器会返回json数据。其中返回的json(上周忘了复制下来)中有属性是分别为true和false 来告诉浏览器是否排队成功,如果为true则可以进入选择小米手机的页面进行购买,否则只能无限制地排队了。而且返回的jeson中有这么一个属性 "hdurl":"?_a=20131022_phone_df56ab516d&_op=choose" 其中hdurl也就是进入选择购买手机页面的URL了,当然前提你是必须是排队成功,有进入购买的资格,因为我第二次抢(未排队成功进入活动)的的时候直接在地址栏输入连接结果报错。所以我想服务器肯定有对用户是否有排队成功进行了判断。既然排队的url得到了,而排队的url中“&_=1382425807810”后面一大串数字也知道是当前时间的毫秒数,我就想是不是能通过java程序来直接向服务器不停的发送请求,这样获得排队的几率也就大一些。而且我之前也写过相关登录某一网站然后抓取网页中数据生成Excel的程序。所以我就开始着手写了。
首先,要想实现自动抢,必须先登录网站。而我之前做的那个程序只需要从response中取得Cookie的一个属性“JSESSIONID”,然后每次访问其它url时候将取得,将该属性设置添加到request的头Header中就足够了(这就是记录登录状态的唯一标识)。但是我用相同的方法来做小米官网的登录却不行,虽然能成功登录,也将返回的cookie都设置到request的Header中,但是在访问其他链接后返回的还是没有成功登录的状态,
真心求高手解决!
使用jar包 HttpClient:4.1
小米登录url:https://account.xiaomi.com/pass/serviceLoginAuth2 方式post提交
参数:
p.addParam("passToken", "");
p.addParam("user", "XXXXXX");//账号
p.addParam("pwd", "XXXXX");//密码 其它的是固定值
p.addParam("callback", "https://account.xiaomi.com");
p.addParam("sid", "passport");
p.addParam("qs", "%3Fsid%3Dpassport");
p.addParam("_sign", "KKkRvCpZoDC+gLdeyOsdMhwV0Xg=");
p.addParam("auto", "true");


...全文
721 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
心足 2013-12-03
  • 打赏
  • 举报
回复
正在用delphi研究
coooliang 2013-11-04
  • 打赏
  • 举报
回复
如果他的排队是页面脚本控制的呢?
快乐的小呆 2013-11-04
  • 打赏
  • 举报
回复
我都抢了3个多月了。 围观解法,顺带接分。
聪头 2013-11-04
  • 打赏
  • 举报
回复
为了抢手机啊。
linconghero 2013-11-03
  • 打赏
  • 举报
回复
楼主,问题解决没有呢?要是解决了,是怎么解决的呢,分享下嘛![/img]
JoeyLin1990 2013-11-02
  • 打赏
  • 举报
回复
前几天不是新闻报道直接链接到静态页面了吗
Defonds 2013-11-02
  • 打赏
  • 举报
回复
	public static String restPost(String serverURL, File targetFile,Map<String, String> mediaInfoMap){

		String content ="";
		try {
			DefaultHttpClient httpClient = new DefaultHttpClient();
			HttpPost post = new HttpPost(serverURL +"?");
			httpClient.getParams().setParameter("http.socket.timeout",60*60*1000);
			MultipartEntity mpEntity = new MultipartEntity();
			List<String> keys = new ArrayList<String>(mediaInfoMap.keySet());
			Collections.sort(keys, String.CASE_INSENSITIVE_ORDER);
			for (Iterator<String> iterator = keys.iterator(); iterator.hasNext();) {
				String key = iterator.next();
				if (StringUtils.isNotBlank(mediaInfoMap.get(key))) {
					mpEntity.addPart(key, new StringBody(mediaInfoMap.get(key)));
				}
			}
			
			if(targetFile!=null&&targetFile.exists()){
				ContentBody contentBody = new FileBody(targetFile);
				mpEntity.addPart("file", contentBody);
			}
			post.setEntity(mpEntity);

			
			HttpResponse response = httpClient.execute(post);
			content = EntityUtils.toString(response.getEntity());
			httpClient.getConnectionManager().shutdown();
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("=====RequestUrl==========================\n"
				+getRequestUrlStrRest(serverURL, mediaInfoMap).replaceAll("&fmt=json", ""));
		System.out.println("=====content==========================\n"+content);
		return content.trim();
	}
最美的词 2013-11-01
  • 打赏
  • 举报
回复
最近我也在研究用代码去抢小米手机,这里有一段程序,你可能会感兴趣: http://www.oschina.net/code/snippet_877598_25771
teemai 2013-11-01
  • 打赏
  • 举报
回复
我听说这个是假的!被证明只是假的排队。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧