淘宝h5api接口sign算法破解PHP篇

[分享] [复制链接]
查看: 4156   回复: 5

1736

主题

4031

回帖

25280万

积分

管理员

时间可以证明一切,包括真爱!

Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28

积分
252804326

最佳新人活跃会员热心会员推广达人宣传达人灌水之王优秀版主荣誉管理论坛元老

杨他他 发表于 2019-5-17 12:42 | 显示全部楼层 |阅读模式
爆款云服务器 30元/月
最近有个项目要采集淘宝哇哦视频,没有相应的API,只能靠抓包获取h5api接口了。
切入正题,开工:
先获取页面加载h5api时的cookies:
这个是页面地址:https://market.m.taobao.com/app/ ... uijian.no_banner_27
通过抓包可以看到加载的h5api是
https://h5api.m.taobao.com/h5/mtop.mediainteraction.video.detail/1.0/?jsv=2.4.5&appKey=12574478&t=1558066703249&sign=2f83acb0b1ec3eacf555f158bd2ad048&api=mtop.mediainteraction.video.detail&v=1.0&type=jsonp&dataType=jsonp&timeout=20000&preventFallback=true&callback=mtopjsonp1&data=%7B%22type%22%3A%22guang%22%2C%22id%22%3A%22307459476%22%2C%22extParams%22%3A%22%7B%5C%22spm-cnt%5C%22%3A%5C%22a310p.11570659%5C%22%2C%5C%22spm-url%5C%22%3A%5C%22a310p.11215598.tuijian.no_banner_27%5C%22%2C%5C%22page%5C%22%3A%5C%22guang%5C%22%2C%5C%22product_type%5C%22%3A%5C%22videointeract%5C%22%2C%5C%22echoParam%5C%22%3A%7B%7D%7D%22%7D
我们获取cookies的目的就是生成sign这个参数;
如何获取cookie呢?
cookie地址:https://h5api.m.taobao.com/h5/mt ... .0/?appKey=12574478
只需要访问这个页面,从这个页面获取cookie就行了。
PHP可以通过curl模拟访问。

有一点要注意的是:
h5api是需要验证sign和cookie的,如果有一项不正确,则请求就会失败,然后服务端会重新生成sign进行验证,但是cookie不会变。
只要知道这一点就好办了。

先通过php的curl请求cookie地址,要连续请求两次,第二次才可以获取到带cookie的header;从中取出_m_h5_tk和_m_h5_tk_enc这两个值就行了。
cookie只需要包含这两项,其中生成sign需要_m_h5_tk去掉后面的短横线和时间戳,然后拼接系统当前时间的13位时间戳,再拼接appkey,再拼接请求的data数据,MD5加密就是sign;
通过这个sign请求h5api数据接口就可以获得想要的东西了。

下面附上demo:
获取cookie:
  1. function getcookie(){
  2.              $tmp_url = "https://market.m.taobao.com/app/tb-windmill-app/ishopping/index";//伪造来路
  3.              $Browser  = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36';//模拟UA  这里用的是浏览器的            
  4.              $cookie="";//初始化cookie
  5.              $headers = array('Content-type:application/x-www-form-urlencoded','Accept:application/json');//发送请求的header
  6.              for($j=0;$j<=2;$j++){  //需要请求两次,因为第一次访问失败之后才会生成cookie
  7.              $url="https://h5api.m.taobao.com/h5/mtop.mediainteraction.video.detail/1.0/?appKey=12574478";//请求地址,必须带上这个默认的appkey
  8.              $ch = curl_init($url);        
  9.              curl_setopt($ch,CURLOPT_HEADER,1);//输出头部信息,cookie就包含其中
  10.              curl_setopt($ch,CURLOPT_REFERER, $tmp_url);        
  11.              curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  12.              curl_setopt($ch, CURLOPT_USERAGENT, $Browser);
  13.              curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);  
  14.              curl_setopt($ch,CURLOPT_COOKIE,$cookie);  
  15.              curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  16.              curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  17.              $content = curl_exec($ch);                  
  18.              curl_close($ch);              
  19.              $_m_h5_tk=$this->get_word($content,'_m_h5_tk=', ';'); //取出_m_h5_tk            
  20.              $_m_h5_tk_enc=$this->get_word($content,'_m_h5_tk_enc=', ';');   //取出_m_h5_tk_enc
  21.              if($_m_h5_tk && $_m_h5_tk_enc){
  22.              return "_m_h5_tk_enc=".$_m_h5_tk_enc."; _m_h5_tk=".$_m_h5_tk;
  23.              }
复制代码

抓取数据:
  1. function getejson(){            
  2.      $cookie = $this->getcookie();               
  3.      $tmp_url = "https://market.m.taobao.com/app/tb-windmill-app/ishopping/index";
  4.      $Browser  = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36';               
  5.      $appKey= 12574478;                                 
  6.      $_m_h5_tk= get_word($cookie,'_m_h5_tk=', '_');//从cookie中取出_m_h5_tk,必须要去掉后面的部分
  7.      $t =$this->getMillisecond();//生成时间戳   
  8.      $data ='{"type":"guang","id":"301740051","extParams":"{"spm-cnt":"a310p.11570659","spm-url":"a310p.11215598.tuijian.no_banner_2","page":"guang","product_type":"videointeract","echoParam":{}}"}';//请求的数据
  9.      $url_data = urlencode($data);//请求的数据编码后要拼接到地址上。
  10.      $headers = array('Content-type:application/x-www-form-urlencoded','Accept:application/json');                                      
  11.      $sign=md5($_m_h5_tk."&".$t."&".$appKey."&".$data); //生成sign
  12.      $url = "https://h5api.m.taobao.com/h5/mtop.mediainteraction.video.detail/1.0/?jsv=2.4.5&appKey=12574478&t=".$t."&sign=".$sign."&api=mtop.mediainteraction.video.detail&v=1.0&timeout=20000&data=".$url_data;
  13.      $ch = curl_init($url);               
  14.      curl_setopt($ch,CURLOPT_HEADER,0);
  15.      curl_setopt($ch,CURLOPT_REFERER, $tmp_url);        
  16.      curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  17.      curl_setopt($ch, CURLOPT_USERAGENT, $Browser);
  18.      curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  19.      curl_setopt($ch,CURLOPT_COOKIE,$cookie);  
  20.      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  21.      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  22.      $content = curl_exec($ch);                  
  23.      curl_close($ch);
  24. return $content;
  25.         }
复制代码
用到的自定义函数:
  1. function getMillisecond() {
  2.                 list($t1, $t2) = explode(' ', microtime());
  3.                 return (float)sprintf('%.0f',(floatval($t1)+floatval($t2))*1000);
  4.         }
复制代码
  1. function get_word($html,$star,$end){
  2.         $pat = '/'.$star.'(.*?)'.$end.'/s';
  3.         if(!preg_match_all($pat, $html, $mat)) {               
  4.         }else{
  5.                 $wd= $mat[1][0];
  6.         }        
  7.         return $wd;
  8. }
复制代码
注意data和h5api链接中包含spm-cnt和spm-url这两项值也非常重要,必须保持一致。

最终输出结果: QQ截图20190517125307.png

0

主题

2

回帖

64

积分

注册会员

Rank: 2

积分
64
382104494 发表于 2020-10-14 10:57 | 显示全部楼层
兄弟好像代码不全呀

点评

有一部分发贴时被过滤了  发表于 2020-10-14 11:36

0

主题

1

回帖

56

积分

注册会员

Rank: 2

积分
56
5656lc 发表于 2020-11-25 12:17 | 显示全部楼层
能否发一手demo给我

0

主题

2

回帖

61

积分

注册会员

Rank: 2

积分
61
悠悠喵 发表于 2020-12-3 15:26 来自手机 | 显示全部楼层
谢谢大佬的分享

0

主题

2

回帖

64

积分

注册会员

Rank: 2

积分
64
382104494 发表于 2021-8-2 18:39 | 显示全部楼层
可以分享一套完整的吗 怎么加到你~~
您需要登录后才可以回帖   登录 立即注册

高级模式

|手机版|小黑屋|杨他他淘宝客程序官方论坛

Powered by Discuz! X3.4 © 2001-2024 Comsenz Inc.