视频网站真实下载地址解析

不贴具体代码了,解析了youku,bilibili,sohu,iqiyi每家的策略都不一样,还都挺奇妙的。

有点解密的感觉,不写代码,只指明方向

首先需要chrome和firefox。chrome看请求比较方便,也方便搜索,而firebug比较适合javascript调试,我用chrome调js不习惯。
我需要下载的是mp4地址,需要把user-agent修改成android

1,解析youku,:
网站通常会通过一个jsonp来返回下载真实地址,问题是如何获得正确的参数
分析后发现youku返回的jsonp中除了真实mp4啥都有,就是下载地址
分析发现,js中一个函数jsonbuildfun,参数设置为返回的jsonp后就能生成真是地址对象了。

我是把页面中这两个js合并改写了下,可以用nodejs直接调用,

还有个坑,生成好的下载地址很有可能用不了!!
解决方法就是需要细致的完全模拟浏览器:
发现请求jsonp的时候需要设置cookie
Cookie:’ykss=; __ysuid=;’
一开始还研究半天这俩参数怎么生成, 原来不需要, 随便写,只要有就行。
妥妥的。

难度4分吧,主要是需要运行页面js

2,解析bilibili
这个最容易,分析请求资源发现
http://www.bilibili.com/m/html5?aid=xxx&page=xx
ua都不用改

难度1分,基本就是白送的

3,sohu
不得不说sohu隐藏的最深,也最鸡贼。
通过jsonp拿到下载地址后,发现除非通过原来网站访问,否则获得的下载地址失效。
分析js画了很长时间,一个一个的过滤,开始是以为生成参数不对,或者消息头有问题。
结果发现有个pv.png,我擦,这真心不是个统计程序,
jsonp中返回消息头有个setcookie
然后在pv.png请求头中,设置这个cookie,原来的下载地址就被激活了。

难度4分吧,不需要改什么js,就是这个机制心急很重。

4,iqiyi

iqiyi是最牛的,
获取jsonp的地址有个src和sc参数
生成算法是扰码加密并且写在页面中的,搜索的话根本搜不到。
而且这个算法大量使用了浏览器参数当变量生成的条件。扰码后反正我是没看明白

如果使用nodejs运行改写以后虽然格式合法,能拿到mp4地址但是不能播。
最后只能使用htmlutil,java实现。

htmlutil也很适合解youku
加载html后就能直接通过命令获得js对象。所有数据基本就是白给了。

难度给5.5分,除非能分析扰码过的好几千行代码,否则改js算法基本没戏。
只能变通下换个工具

thinkphp 3.1 select 内存溢出

网站项目想做个队列, 能一直运行. 数据库操作已经写好了想直接套用think php的直接用.

然后发现一个坑, 只要执行model的find 内存就尼玛一直长.

然后追查:
是运行到解析join的时候出现的
在ThinkPHP/Lib/Core/Db.class.php 589行
protected function parseJoin($join) {
$joinStr = ”;
if(!empty($join)) {
if(is_array($join)) {
foreach ($join as $key=>$_join){
if(false !== stripos($_join,’JOIN’))
$joinStr .= ‘ ‘.$_join;
else
$joinStr .= ‘ LEFT JOIN ‘ .$_join;
}
}else{
$joinStr .= ‘ LEFT JOIN ‘ .$join;
}
}
//将__TABLE_NAME__这样的字符串替换成正规的表名,并且带上前缀和后缀
$joinStr = preg_replace(“/__([A-Z_-]+)__/esU”,C(“DB_PREFIX”).”.strtolower(‘$1’)”,$joinStr);
return $joinStr;
}

主要这句:
$joinStr = preg_replace(“/__([A-Z_-]+)__/esU”,C(“DB_PREFIX”).”.strtolower(‘$1’)”,$joinStr);
$joinStr=”;的时候内存就一直长啊!!

因为项目很少用join,这个服务也用不到join,在方法顶部增加:
if(empty($join)){
return ”;
}

然后终于妥当了.

yum centos6.5 安装 php7 php56

安装源,这个是 centos6的

yum install http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm 这个插件少memcache之类的木有

验证下:yum search php7 就会出来了

yum install -y php70

然后提示:

Error: php70w-common conflicts with php-common-5.3.3-46.el6_7.1.x86_64

之前有 –> Processing Conflict: php70w-common-7.0.3-1.w6.x86_64 conflicts php-common < 5.5.0

应该卸载原来的php5.3

yum remove php*

 

然后安装需要的库

yum list php7* 可以列出所有可用的

yum install php70-php.x86_64 php70-php-gd.x86_64  php70-php-mbstring.x86_64  php70-php-mysqlnd.x86_64  php70-php-pdo.x86_64  php70-php-pdo-dblib.x86_64   php70-php-pecl-imagick.x86_64 php70-php-pecl-imagick-devel.x86_64 php70-php-pecl-memcache.x86_64 php70-php-pecl-memcached.x86_64  php70-php-pecl-xdebug.x86_64  php70-php-devel.x86_64  php70-php-fpm.x86_64

 

 

——-

thinkphp3.1老程序不支持,

改php5.6

yum install php56-php.x86_64 php56-php-gd.x86_64  php56-php-mbstring.x86_64  php56-php-mysqlnd.x86_64  php56-php-pdo.x86_64  php56-php-pdo-dblib.x86_64   php56-php-pecl-imagick.x86_64 php56-php-pecl-imagick- devel.x86_64 php56-php-pecl-memcache.x86_64 php56-php-pecl-memcached.x86_64  php56-php-pecl-xdebug.x86_64  php56-php-devel.x86_64  php56-php-fpm.x86_64 php56-php-mysqlnd.x86_64 php56-php-5.6.19-1.el6.remi.x86_64 php56 php56-php-mbstring.x86_64

这个一定要装 php56-php-5.6.19-1.el6.remi.x86_64 如果不装不会生成libphp.so apache下会无法使用,nginx到无所谓
php56-php-mbstring.x86_64 这个包oss会用到,否则aliyun会异常

修改上传尺寸
/opt/remi/php56/root/etc/php.ini
upload_max_filesize =
post_max_size =