网易相册列表分析 (转)

网易相册列表分析 (转)网易相册以无限容量,速度快,资源丰富等特色深受网友喜爱,但是因为相册网站本身没有提供批量下载功能,使得批量保存自己喜欢的相片成为一个问题。我是通过抓包和文件调用跟踪分析,来摸清网易相册的列表方式的。值得注意的是,网易相册的相片地址列表并不是由服务器处理后再发过来的,而是通过脚本控制,服务器只是发个框架和一些控制脚本过来~~~用FireFox2.0+JSView浏览茜茜的网易

网易相册以无限容量,速度快,资源丰富等特色深受网友喜爱,但是因为相册网站本身没有提供批量下载功能,使得批量保存自己喜欢的相片成为一个问题。

我是通过抓包和文件调用跟踪分析,来摸清网易相册的列表方式的。
值得注意的是,网易相册的相片地址列表并不是由服务器处理后再发过来的,而是通过脚本控制,服务器只是发个框架和一些控制脚本过来~~~
用 FireFox 2.0 + JSView 浏览茜茜的网易相册 http://photo.163.com/photos/docrack/
再单击 JSView 的任务栏图标,发现以下JS 列表:
²        
albumsinfo.php?user=docrack
²        
browser.js
²        
global.consts.js
²        
global.urls.js
²        
global.utils.js
²        
paginate.js
²        
pholders.consts.js
²        
pholders.html.js
²        
pholders.js
²        
pholders.utils.js
²        
utils.js
²        
photo_ad.js
²        
v51,js


在这个 JS 脚本列表中,带参数那个最可疑,那就先打开他来看看:
albumsinfo.php?user=docrack
内容如下:
var hasAlbum = true;
var hasCover = true;
var gAlbumsInfo = {};
var gAlbumsIds = [106175945,106179880];
var datas = [[“705.2449719279.1.450×600″,1,9,”
我喜欢的… “,”这可是我喜欢的..”]
,[“0.0.0.130×98″,2,31,”
也是我喜欢的… “,”也是我喜欢的图片哦… “]];
for(var i=0; i<gAlbumsIds.length; i++){
 gAlbumsInfo[gAlbumsIds[i]] = datas[i];
}
datas = null;
 
很好,和预想中的一样,这文件中包含有相册目录的整体信息,我分析得到:
²
        粗体部分是相册目录的 ID,一共有两个,
²
        斜体部分,是第一个目录的介绍信息 ~~~
现在解析一下目录介绍信息:
²
        //封面
²
        705                  封面相片所在服务器 SID
²
        2449719279           封面相片 ID,如果为空,就表示是加密相册
²
        1                    封面相片相片后缀名类型, 1,jpg;2,gif,如果为空,就表示是加密相册
²
        450×600              封面相片原始图片尺寸,如果为空,就表示是加密相册
 
²
        //简介
²
        1                    相册权限, 0 私有;1,公开;2,加密
²
        9                    相册中相片总数
²
        我喜欢的 ..          相册名称
²
        这可是我喜欢的 ..    相册简介
 
就是通过本地脚本来获取服务器上相册信息的。打开 global.consts.js 相面这句话,一看就知道:
var PHOTO_SERVER_DOMAIN = “http://img%SID%.photo.163.com”;
上面的 705 就是其中的 SID ,即服务器序号。
从上面综合,从
http://photo.163.com/js/albumsinfo.php?user=
用户名
就能获取指定用户的相册信息 ~~~
 
由此,在程序的设计时,只有使用一个网络通讯函数向远程服务器请求 “ http://photo.163.com/js/albumsinfo.php?user=用户名”就能获取获取当前用户的相册目录信息了,这就有 NetEaseAlbum 类的 GetAlbums 来控制获取,由GetDate 来完成网络操作;再有 Imports 函数来解析相册目录列表信息。就可以完成相册目录列表的获取了。具体看下面的 NetEaseAlbum 类介绍。
点入第一个没有加密的相册,也就是 ID 为 106175945 的相册,这回查看到的 JS 脚本更多了,但还是带参数那个有意思。
photosinfo.php?user=docrack&aid=106175945
明显,
user 后面跟用户名
aid 后面跟相册 ID
打开看看:
var hasPhoto = true;
var hasCover = true;
var hasPermission = true;
 
var gAlbumInfo = {‘cover’:”705.2449719279.1.450×600″,’privacy’:1,’title’:”
我喜欢的… “,’descr’:”这可是我喜欢的.. “}
;
 
var gPhotosInfo = {};
var gPhotosIds = [2449722584,2449722395,2449721659,2449721495,2449721208,2449720964,
2449719654,2449719514,2449719279];
var datas = [[705,1,”470×326″,”BB_1 “],[705,1,”450×600″,”BB_2 “],[705,1,”425×562”,”BB_3 “],[705,1,”404×579”,”BB_4 “],[705,1,”404×539”,”BB_5 “],[705,1,”640×640”,”AA_1 “],[705,1,
“400×533”,”AA_2 “],[705,1,”450×600”,”AA_3 “],[705,1,”450×600”,”AA_4 “]];
for(var i=0; i<gPhotosIds.length; i++){
 gPhotosInfo[gPhotosIds[i]] = datas[i];
}
datas = null;
我的分析如下:
²
        粗体部分就是说包含的全部相片的 ID 了。
²
        斜体部分就是一张相片的介绍信息
现在解析一下一张相片的介绍信息:
²
        705                 相片所在服务器 SID
²
        1                    封面相片相片后缀名类型, 1,jpg;2,gif
²
        470×326              原始图片尺寸
²
        BB_1                 相片标题
 
从上面综合,从
http://photo.163.com/js/photosinfo.php?user=
用户名&aid=相册ID
就能获取指定用户的指定相册内的相片信。
 
由此,在程序的设计时,只有使用一个网络通讯函数向远程服务器请求 “ http://photo.163.com/js/photosinfo.php?user=用户名&aid=相册ID”就能获取获取当前用户的指定相册内的相片信息了,这就有 NetEaseAlbum 类的 GetAlbums 来控制获取,由GetDate 来完成网络操作;再有 AlbumsInfo 类的Imports 函数来解析相册内的相片信息。就可以完成相册内的相片信息的获取了。具体看下面的 NetEaseAlbum 类介绍。
 
获取了信息,该入和整合成相片的具体下载链接?
打开第一张相片,查看它的链接
http://img705.photo.163.com/docrack/106175945/2449722584.jpg
看看就明白了,
相片真实地址格式如下:
http://imgSID.photo.163.com/
用户名/相册ID/图片ID.jpg
相片缩略图地址格式如下:
http://imgSID.photo.163.com/
用户名/相册ID/__scale__1_图片ID.jpg
知道这些,就可以使用 PhotosInfo 类中的 BuildURL 来重建相片真实地址和相片缩略图地址了。
 
一下内容是通过使用 WSockExper 抓包分析得的。
 
对于加密的相册,有点麻烦,大概如下:
先向服务器 POST 密码到:
http://photo.163.com/photos/用户名 /相册ID/
数据格式如下:
checking=1&pass=
密码&submit=%D1%E9%D6%A4
如果密码正确,服务器返回一个 Cookie,其内容如下:
HALFORDER=41826293c391c246f4566b04807f05f8d
然后,再向服务器发送这段信息,以及要提取的相片列表,此时将返回那个加密相册的全部内容了,如果没有发送 Cookies ,那么取回的 JS 脚本,里面的数据段是空的。
以上验证过程,是通过 NetEaseAlbum 类的 Decrypt 函数来实现。
 
对于登陆,也需要使用到 Cookie ,过程如下。
先向服务器 POST 用户名和密码到:
http://reg.163.com/in.jsp?url=http://photo.163.com/myalbum.php
数据格式如下:
username=
用户名&password=密码&
如果用户名和密码正确,服务器返回四个 Cookie,其内容如下:
NTES_SEDD=(Hash
值)
NTTEASE_SSN=
用户名
NTTEASE_ADV=(Hash
值)
VRSJSSIONID=(Hash
值)
然后,再向服务器发送这段信息,以及要提取的相册目录列表,此时将返回全部相册的全部内容了,
以上登陆过程,是通过 NetEaseAlbum 类的 Login 函数来实现。
 
综合上面全部,我已经分析了网易相册的通讯协议,包括获取相册、相片信息,验证加密相册,登陆,已经地址分析。由此就可以完成 NetEaseAlbum 类以及其他子类的设计框架了。 

 转自:
http://blog.csdn.net/HeTaoOS/archive/2007/03/02/1519291.aspx

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/38022.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注