继续秒杀器研究之淘宝UA.JS

nightskystar 2013-06-24 11:42:41
最先完成的是万达影城的每周五8元电影抢票,练手成功,已成功帮同事抢完票,并就不懂问题在CSDN进行发帖,并顺利结贴。

Next challenge: 淘宝https登陆

相信很多你做网络爬虫或者什么的,对这个应该有相应的研究

在通过HTTP Analyzer分析淘宝登陆界面发现了一个难点,即淘宝登陆网页中存在的ua.js文件来生成登陆时的ua字段post信息,此信息犹如加密算法,中间涉及屏幕分辨率,鼠标位置等一系列信息,最终合成ua字段值。比较难破解,即便花了几天看懂了,淘宝将ua.js文件进行更换,还是不起作用

针对上述问题,有以下几种脑子中自动生成的解决方案:
1.死方法,读懂ua.js,使用httpclient,post时,加载当前的ua字段值,https登陆(有点烦,未经试验)

有对这个有研究的,可在下面回帖。大牛请赐教

2.先用ie登陆,然后获得当前ie登陆后的cookie,不知道有木有什么java的工具,用此工具设置cookie值来模拟当前浏览器完成登陆操作(个人觉得此种办法比较靠谱,而且简单)只是不会

大牛拜托,要是有好方案,可以在下面发言

3.像火车票抢购一样,做一个脚本内嵌到chrome浏览器里面,然后自己登陆后完成一系列操作(不过个人感觉,这个有点像键盘精灵,通过模拟鼠标点击来完成操作,不适合秒杀这种快节奏 “秒杀最好还是直接后台参数post来的最快”)
有懂这方面的大牛也可以畅所欲言,技术交流,大牛们上。感谢

纯属技术交流,做登陆,秒杀器纯属个人业余爱好,IT男,不然晚上天天玩dota也木有意思
...全文
11816 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhabc 2014-12-04
  • 打赏
  • 举报
回复
大牛若隐若现,呵呵
Andrewdavid 2013-11-21
  • 打赏
  • 举报
回复
大牛啊,学习了!
hezy65 2013-10-29
  • 打赏
  • 举报
回复
我POST登陆,好像只用四五个参数就行了
nightskystar 2013-08-25
  • 打赏
  • 举报
回复
引用 16 楼 xyz 的回复:
我成功登陆了!!!!!!!!
可以谈谈成功经验么?
nightskystar 2013-08-25
  • 打赏
  • 举报
回复
引用 12 楼 Peak_Life 的回复:
淘宝登陆不要Cookie也一样能登陆,只要POST数据正确,就OK了。没那么复杂。 你抓包分析一下,登陆发送POST请求,没有cookies也一样嫩登陆
我觉得抓cookie,模拟可能是一个好的路径
nightskystar 2013-08-25
  • 打赏
  • 举报
回复
引用 12 楼 Peak_Life 的回复:
淘宝登陆不要Cookie也一样能登陆,只要POST数据正确,就OK了。没那么复杂。 你抓包分析一下,登陆发送POST请求,没有cookies也一样嫩登陆
看到的有点晚,我用HttpAnalyzer抓包分析过,UA这个字段值数据是有的,而且是试过没有ua,使用httpclient提交数据是不会顺利登录成功的
X技术交流X 2013-08-20
  • 打赏
  • 举报
回复
引用 12 楼 Peak_Life 的回复:
淘宝登陆不要Cookie也一样能登陆,只要POST数据正确,就OK了。没那么复杂。 你抓包分析一下,登陆发送POST请求,没有cookies也一样嫩登陆
主要是抓不到淘宝post所需要的数据, 现在都是https的
Peak_Life 2013-08-19
  • 打赏
  • 举报
回复
淘宝登陆不要Cookie也一样能登陆,只要POST数据正确,就OK了。没那么复杂。 你抓包分析一下,登陆发送POST请求,没有cookies也一样嫩登陆
Littlesuperxu 2013-07-24
  • 打赏
  • 举报
回复
Perl 的登录部分:
#!/usr/bin/perl -w
use LWP;
use HTTP::Cookies;
use warnings;

sub login{
      ($username,$pwd)=@_;

      my ($url,$res);
      my $ua = LWP::UserAgent->new;
      my $cookie_jar=HTTP::Cookies->new(file =>"./cookie.taobao",ssl_opts =>{verify_hostname=>0},autosave => 1);

      # get cookie
      $url='https://login.taobao.com/member/login.jhtml';
      $ua->cookie_jar($cookie_jar);
      $ua->agent("Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; User-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1); .NET CLR 2.0.50727)");
      #$res = $ua->get($url);

      # post form
      $ua->cookie_jar($cookie_jar);
      push @{$ua->requests_redirectable}, 'POST';
      $res = $ua->post(
              $url,
              [
              TPL_username => $username,
              TPL_password => $pwd,
              actionForStable => 'enable_post_user_action',
              action => 'Authenticator',
              event_submit_do_login => 'anything',
              ]
      );

      #print $res->content();
      if($res->content()=~/class=\"error\"><\/p>/){
          print "登陆成功!\n";
      }else{
          print "登陆失败!\n";
      }

}

login("username","password");
Peak_Life 2013-07-22
  • 打赏
  • 举报
回复
其实可以负责任的告诉你,POST数据中没有ua数据一样可以登录成功,只是cookie处理细节的问题,只是在同一处频繁登录会有封号可能。 活动中的ua可以换个思路获取。
softroad 2013-06-29
  • 打赏
  • 举报
回复
纯属技术交流,不要干坏事啊
softroad 2013-06-29
  • 打赏
  • 举报
回复

package pdm.tool;

import java.util.HashMap;
import java.util.Map;

public class Cookie {

   public native static String getCookie(String url);

   static {
      try {
         System.loadLibrary("Cookie");
      }
      catch(UnsatisfiedLinkError e) {
         e.printStackTrace();
      }
   }

   public static void printCookie(String url) {
      String cookie = getCookie(url);

      if(cookie.length() > 0) {
         String[] cookies = cookie.split("; ");

         for(int i = 0; i < cookies.length; i++) {
            System.err.println(cookies[i]);
         }
      }
      else {
         System.err.println("not found cookie of " + url);
      }
   }

   public static Map<String, String> getCookieMap(String url) throws Exception {
      String cookie = getCookie(url);
      Map<String, String> cookieMap = new HashMap<String, String>();

      if(cookie != null && cookie.trim().length() > 0) {
         String[] cookies = cookie.split("; ");

         for(int i = 0; i < cookies.length; i++) {
            String name = cookies[i].split("=", 2)[0];
            String value = cookies[i].split("=", 2)[1];
            cookieMap.put(name, value);
         }
      }
      else {
         throw new Exception("not.found.partminer.cookie");
      }

      return cookieMap;
   }

   /**
    * @param args
    * @throws Exception 
    */
   public static void main(String[] args) throws Exception {
      printCookie("http://www.baidu.com");
      getCookieMap("http://www.baidu.com");
   }
}
softroad 2013-06-29
  • 打赏
  • 举报
回复
2.先用ie登陆,然后获得当前ie登陆后的cookie,不知道有木有什么java的工具,用此工具设置cookie值来模拟当前浏览器完成登陆操作(个人觉得此种办法比较靠谱,而且简单)只是不会 我以前搞过个,c++写了个dll,java调用下

JNIEXPORT jstring JNICALL Java_pdm_tool_Cookie_getCookie
  (JNIEnv *env, jclass, jstring jurl)
{
	const char *url = env->GetStringUTFChars(jurl, 0);
	TCHAR buffer [16384];
	DWORD bufferSize = sizeof(buffer)/sizeof(buffer[0]);
	BOOL bRes = InternetGetCookie(url, "", buffer, &bufferSize);
	env->ReleaseStringUTFChars(jurl, url);
	jstring jval = NULL;

	if(bRes) {
		jval = env->NewStringUTF(buffer);
	}
	else
	{
		jval = env->NewStringUTF("");
	}

	return jval;
}
nightskystar 2013-06-26
  • 打赏
  • 举报
回复
貌似大家不是很热情啊
MiceRice 2013-06-26
  • 打赏
  • 举报
回复
个人更倾向于“方案3”,实施可能性最高,脚本直接调用淘宝准备好的函数,只是不能做大并发而已;成功了一种,再研究其它方案来优化。
nightskystar 2013-06-25
  • 打赏
  • 举报
回复
昨天晚上发现淘宝登陆的一个小bug,就是既然通过网页登陆会出现ua,那么选择http://login.m.taobao.com/login.htm登陆呢? 哈哈,水到渠成的绕过了us.js,登陆变得简单了许多。不过多了一个输入手机验证码的工作。 有知道如何解决上述问题的大牛们,可以来这谈谈你们的看法。
-AJ- 2013-06-24
  • 打赏
  • 举报
回复
那我就坐这一起等吧
nightskystar 2013-06-24
  • 打赏
  • 举报
回复
自己顶一个, 有木有大牛看到此贴

25,980

社区成员

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

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