SkyDrive客户端开发过程详解

SkyDrive客户端开发过程详解

 原文: http://www.panshy.com/article/Sort_Desktop/netWork/2010-11-18/136.php

首先要想上传文件到云(以下的云指的就是SkyDrive)上面,必须知道云上传文件的整个过程
经过简单的了解分以下步骤
1.用户验证
2.用户验证后,就是获取云上的可用空间大小
3.云可允许的最大单个文件大小,确定用户上传的目录是否存在,同名文件存在是否更改等等
4.最终上传文件

//说明:如果网址开头http用一般的SOCKET传输就行,如果是https说明用了证书必须用openssl发送数据到服务器

实现步骤

用户输入网址 skydrive.live.com
程序会经过两次跳转(http头是302,301)
从http头中取出Location: 后面就是要转向的新地址(如果这都不知道,看http协议)
 转到类似https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=11&ct=1290081016&rver=6.1.6206.0&wp=MBI&wreply=http:%2F%

2Fskydrive.live.com%2Fhome.aspx&lc=2052&id=250206&cbcxt=sky
这是一个有SSL保护的网址,是https以后发送数据就得用SSL加密发送到服务器上
我的程序使用了开源库openssl来传输
连接到这个地址后,如果返回的是200 OK说明出现了登录界面,
这时有必要查看是不是输入密码错误等一些信息,因为200 OK只是说网页包是对的,如何判断呢,我已经分析好啦
查看http包体,如果有如下字段出现,JS代码的,很好判断,找关键字就行
srf_fError=1;var srf_sErr='电子邮件地址或密码不正确,请重试。<!-- HR=80041012 -->';
找到了说明出错了

如果没有出错就
立即用openss发送POST到服务器上就可以完成登录,大体如下, 这是抓包抓来的
POST /ppsecure/post.srf?wa=wsignin1.0&rpsnv=11&ct=1290082451&rver=6.1.6206.0&wp=MBI&wreply=http:%2F%2Fskydrive.live.com%

2Fhome.aspx&lc=2052&id=250206&cbcxt=sky&bk=1290082454 HTTP/1.1

login=panshsoft@hotmail.com&passwd=0xxx&type=11&LoginOptions=3&NewUser=1&MEST=&PPSX=PassportR&PPFT=CfXtP9StN3ZOc3AEJsk3n6IHJq

kntqKYz2kznUs*tkmEWxcHy1xI*ZcKkfujgKNPK0P9*gKHJOkC9*bzlc7IZZ0CbyLu6pxipbG02Q9ieNsm2VxeoYx64lBtJwU9ryCrVATF2k5*gQK1lwdj!XG!

jLXr0Mzb*PKBeysH8UUIYRmadDgId*SNHHhIr6VnMagUUe7zX1dH35K*YFI2EpRWvdtY0W8r&idsbho=1&PwdPad=&sso=&i1=&i2=1&i3=24485&i4=&i12=1
链接有些是从上一个https包中取出来的,在POST时实测只要发送login=panshsoft@hotmail.com&passwd=0xxx这一段就行

注:这中间有一个过程,其实没多大难度,如果要说难,就是对http协议头的了解
在服务器返回的http头中有Set-Cookie里面的值是用分号隔开的一定要保存起来,每次都要保存,如果是相同的,就使用最后出现的
Cookie的值是要返回到服务器上的

Cookie不需要保存的段如下
path, expires,domain,version,LD

http协议头中有要注意的地方就是
Accept-Encoding: gzip, deflate 如果使用这个,服务器端会把http包体压缩,这时必须在客户端解压,否则看到的是乱码,什么也无法解析
:)估计有好多人栽在这

在POST的时候http头中有一个
Content-Type: application/x-www-form-urlencoded
这个必须有,否则post 过去的数据,服务器不认
:)不会也有人栽在这吧

login=panshsoft@hotmail.com&passwd=0xxx
看这一段是POST过去的,微软云框架用的是明文,然后用SSL加密发送,还好微软没把这段用JS加密,要不然还得分析JS代码,另外就是微软没

有用密码验证(就是那种图片有数字的),要不然增加复杂度


好啦,经过以上步骤可以看到云啦,POST后服务器返回如下信息说明上了云平台
HTTP/1.1 200 OK
Cache-Control: no-cache
Connection: close
Date: Thu, 18 Nov 2010 11:50:40 GMT
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Expires: Thu, 18 Nov 2010 11:49:40 GMT
Server: Microsoft-IIS/6.0
PPServer: PPV: 30 H: BAYIDSLGN1S59 V: 0
P3P: CP="DSP CUR OTPi IND OTRi ONL FIN"
X-XSS-Protection: 0
Set-Cookie: MSPOK=$uuid-b1391be1-4c5b-45a1-a6af-d44511f6685f$uuid-e5466d52-0a32-4cef-a3d7-ac4efc694659; path=/;version=1
Set-Cookie:

PPAuth=AQi1SnSu4NtpJNY6IzJ75iW7GPMxwKodZe0hWq3yfhQ78GV6XZ1I55kA3QcNm8NGJKTPdZ6NyMGLvxQUcA4ESqIBVXd6u5ZmuM*SnWmd6uSlzSMPkEWjM2

jrEbHwfp9z0m1fyMb3qbzgyssh87ru6fU9T7vVqdhTvhepGpVZ2aps0EELZX6IH!o0z5fqpH6vkoWUd6oh9WGRjeL4AenDfeU1pfNu0xndaLAEvHk$;

domain=login.live.com;secure= ;path=/;HTTPOnly= ;version=1
Set-Cookie: PPLState=1; domain=.live.com;path=/;version=1
Set-Cookie: MSPShared=1; expires=Wed, 30-Dec-2037 16:00:00 GMT;domain=login.live.com;path=/;HTTPOnly= ;version=1
Set-Cookie: MSPPre= ;domain=login.live.com;path=/;Expires=Thu, 30-Oct-1980 16:00:00 GMT
Set-Cookie: MSPCID= ; HTTPOnly= ; domain=login.live.com;path=/;Expires=Thu, 30-Oct-1980 16:00:00 GMT
Set-Cookie: WLOpt=nrme=1;domain=login.live.com;path=/;Expires=Wed, 30-Dec-2037 16:00:00 GMT
Set-Cookie:

RPSTAuth=EwDgARAnAAAUWkziSC7RbDJKS1VkhugDegv7L0eAACzThXZTTTfeuBS5Xl8h/4Krf2uCGm7ZQgahsvgkKKGWR7eAu17Hogg5m/fb79Hl+RDfkapLHVqJ

gPBBSgTBgQajfEyE8TGUg90E9BedY0XkFQWLEdYGxJL0cNFP5MFGkp3VKasIjiUHc2DR+YbWAq5ak1Cyg6CEcdvHo+j05LFlA2YAAAhtXuik7EgSYDAB8tHa0sEL9

Fmy7XQRQLUR7bY9G7qSPD8nKNSolFocxMYHxZRVLqPWphYvSB7uA7acHK3CvEwFxX4o+0HAVIPUn0Zk0lfpp23rxahwr/9SnE6sc3Q5bKaE1weJjW97as0i8cDpoL

ww34eLcIpZQZEF2AhZti1PRDHPCmnBrV+RTsag4KtnKhA9uXzBYF43RqxNN1BBWZLODpDZFbErp6clBx9urEeoddUeDjAu4Juq05KShyVGkQbPtkQw8exuRpzGo3A

oSU8rrTWkm203Fzqys845FQqVFo0HNnlOel1XVwYPkgph7WJrDpIpWU6RJzB/o7uksfetRQ7Kvn0BaGFtEmZ9o8z0VeZDLqVYKpG+retF6hEygU+dpEQnzwO4O6ce

C7y2d6SCuT3YabSk9l8fYl0B; domain=.live.com;path=/;HTTPOnly= ;version=1
Set-Cookie: RPSTAuthTime=1290081040; domain=login.live.com;path=/;HTTPOnly= ;version=1
Set-Cookie: MSPAuth=2pN*OysEDE8CWVjWYzEcx4ShQucUfIKLbSBCoAkE934zvZLxV2jZWaE*WyHmqsij5wuMgTS6jX5IK88BOF0G!

pi3tVZg3Sc8r3kGYF5URW8T*e57gTeVHr!STx2fWcBUj9; domain=.live.com;path=/;HTTPOnly= ;version=1
Set-Cookie: MSPProf=26bdCknVuCBiyEXga4FImHXKvmaeVmAPECJvtm1ca5wSwEFDOX1bSw2doFOR5Vfn8mFa5T!

72HVzEmAtcBLBwBsZv82V7k69YZylXVYD67uh7OBdcjBZzYWKkeK4U06566Ij5qLBJMTtUDLnlJmWP328wlydv3aiarEo9oDwUuoqiDzo5KXxELvg$$;

domain=.live.com;path=/;HTTPOnly= ;version=1
Set-Cookie: MSNPPAuth=CZOafHAQiow5aEgH*I5Q7975!26glzn3lCEAswTONuhCf!

OC5QPNis7pZ95IZP8ujzwwYLPunuwADojLEYMYeCBonZP5uLzWQi5rXYmtgA7rNEBTdCE1*9bUGvQSp!ltRuhuEL2!z6SpizjzLztxwD0erCJ5y!

8Bd01bGNYW81VRPuJ6ph7bc4R5NW9OKleMN0EkxWMS4eYG0drl1XFYyz3UkPxyOlaOKs8n5GylzM36HLJBSVQlwVCunx5XfLdj*ZNoR2rZ0zCy0OrpQ2tcKGFT8ni

O3I!tjRR9eAK0!78fdudpy7oTxwVdwErJHY7oNBW73N*sJfK63rvxq7PtxaeENqnz7HElI!rBWkTFZz2Vb4X!

BkQx0WtcnyzPwvwJBwWF*LjxLklzdn*ro6Dqqhf2a8J7F22bXwCmSHU9dckdapoy506R7Pio1bPkdqfQ*wr3y5PxBdzLj7KqSN!I1AZLePDN;

domain=.live.com;path=/;HTTPOnly= ;version=1
Set-Cookie: MH=MSFT; domain=.live.com;path=/;version=1
Set-Cookie: MHW=; expires=Thu, 30-Oct-1980 16:00:00 GMT;domain=.live.com;path=/;version=1
Set-Cookie: MHList=; expires=Thu, 30-Oct-1980 16:00:00 GMT;domain=.live.com;path=/;version=1
Set-Cookie: NAP=V=1.9&E=a2b&C=iyRuQjVXJkGw-K6jESVJZRcviAFRdST3RhEfIYYuPDqjps0lKIstPg&W=1;domain=.live.com;path=/
Set-Cookie: ANON=A=02E9B384E37188F26090BF3EFFFFFFFF&E=a85&W=1;domain=.live.com;path=/
Set-Cookie: MSPVis=$9;domain=login.live.com;path=/
Set-Cookie: pres=; expires=Thu, 30-Oct-1980 16:00:00 GMT;domain=.live.com;path=/;version=1
Set-Cookie: LOpt=0; domain=login.live.com;path=/;version=1
Set-Cookie: MSPSoftVis=@72198325083833620@:@; domain=login.live.com;path=/;version=1
Content-Encoding: gzip
Vary: Accept-Encoding
Transfer-Encoding: chunked

可能有人会问,接下来如何操作呢,200 OK ??如何解析文件,文件夹,空间大小呢??

接下来,没那么简单,还要几个步骤

用GET去下面的地址
http://skydrive.live.com/home.aspx?ppud=4&wa=wsignin1.0
看清了,是http用SOCKET发包就行
服务器返回如下头
HTTP/1.1 302 Found
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Expires: -1
Location: https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=11&ct=1290081057&rver=6.1.6206.0&wp=MBI&wreply=https%3a%2f%

2fauth.bay.livefilestore.com%2fstorageservice%2fpassport%2flogin.aspx%3fcid%3d5361521169320710486%26cru%3dhttp%253a%252f%

252fskydrive.live.com%252fhome.aspx%253fppud%253d4%2526wa%253dwsignin1.0%2526sa%253d767433232&lc=2052&id=250915&cbcxt=sky
Server: Microsoft-IIS/7.0
X-UA-Compatible: IE=7
X-AspNet-Version: 2.0.50727
Set-Cookie: RPSMaybe=; expires=Thu, 30-Oct-1980 16:00:00 GMT; path=/
Set-Cookie: xid=944bff36-a36d-49da-9c7c-cea8c91006b8&JxR32&BAYxxxxxxC607&370; domain=.live.com; path=/
Set-Cookie: xidseq=6; domain=.live.com; path=/
Set-Cookie: mktstate=S=-1541922472&U=&E=&P=-cn&B=zh-cn; domain=.live.com; path=/
Set-Cookie: LD=; domain=.live.com; expires=Thu, 18-Nov-2010 10:10:57 GMT; path=/
Set-Cookie: E=P:2Aob/y1VzYg=:x9X+uFZGPcMLHwEUmhdTdzGKW0uK3iIHXQQMA1HlhPA=:F; domain=.live.com; path=/
Set-Cookie: wla42=cHJveHktYmF5LnB2dC1jb250YWN0cy5tc24uY29tfGJsdTIqMSw0QTY3RjMxOEQxMTkxMTU2LDEsMA==; domain=live.com;

expires=Thu, 25-Nov-2010 11:50:57 GMT; path=/
Set-Cookie: SAToken=767433232; domain=.live.com; path=/
X-Powered-By: ASP.NET
Date: Thu, 18 Nov 2010 11:50:56 GMT
Content-Length: 503
看要地址跳转,又是一个https
中间有很多类似这样的过程。我在这就不一一列举,基本上都是用我上面提到的方法跳转,GET ,post

进过跳转,最后到达如下步骤
GET /login.srf?wa=wsignin1.0&rpsnv=11&ct=1290085048&rver=6.1.6206.0&wp=MBI&wreply=https%3a%2f%2fauth.bay.livefilestore.com%

2fstorageservice%2fpassport%2flogin.aspx%3fcid%3d5361521169320710486%26cru%3dhttp%253a%252f%252fskydrive.live.com%

252fhome.aspx%253fppud%253d4%2526wa%253dwsignin1.0%2526sa%253d233424720&lc=2052&id=250915&cbcxt=sky HTTP/1.1
Host: login.live.com

就要换成POST
POST /storageservice/passport/login.aspx?cid=5361521169320710486&cru=http%3a%2f%2fskydrive.live.com%2fhome.aspx%3fppud%3d4%

26wa%3dwsignin1.0%26sa%3d233424720&ppud=4&wa=wsignin1.0 HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel,

application/vnd.ms-powerpoint, application/msword, */*
Referer: https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=11&ct=1290085048&rver=6.1.6206.0&wp=MBI&wreply=https%3a%2f%

2fauth.bay.livefilestore.com%2fstorageservice%2fpassport%2flogin.aspx%3fcid%3d5361521169320710486%26cru%3dhttp%253a%252f%

252fskydrive.live.com%252fhome.aspx%253fppud%253d4%2526wa%253dwsignin1.0%2526sa%253d233424720&lc=2052&id=250915&cbcxt=sky
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: auth.bay.livefilestore.com
Content-Length: 663
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ANON=A=02E9B384E37188F26090BF3EFFFFFFFF&E=a85&W=1; NAP=V=1.9&E=a2b&C=iyRuQjVXJkGw-

K6jESVJZRcviAFRdST3RhEfIYYuPDqjps0lKIstPg&W=1; RPSShare=1

NAP=V%253D1.9%2526E%253Da2b%2526C%253DiyRuQjVXJkGw-K6jESVJZRcviAFRdST3RhEfIYYuPDqjps0lKIstPg%2526W%253D1&ANON=A%

253D02E9B384E37188F26090BF3EFFFFFFFF%2526E%253Da85%2526W%253D1&t=EgBdAQMAAAAEgAAACoAAOMAG1a7%2Bc6J2v%

2B5eIK0OTx3qsPZQzQxgjV3rJ%2FhxY9PuGe4cWTHHhSYtqfzzXxkvat8y%2Bq3Mi8q8dOBUENhQ5Eor4bdIAsdJJHhRKAnFqLDST%

2Boihd3Ox057vANGsLb4uEaHMfLSQvtxHmhuoi4aMZPVlzv9VuMDxYLtKIxCUS%

2FMAFkAzAAAAAYAy8TOvK4i5UyuIuVMI9QDAAAAAAAAFgBwYW5zaHNvZnRAaG90bWFpbC5jb20ASgAAFXBhbnNoc29mdEBob3RtYWlsLmNvbQAAAAJDTgAGMTAwMD

E2AJmdZggEAgAAeNpmQAAEQwADanVuAAJhaQTIAAAAAAAAAAAAAAAA0RkRVkpn8xgAALgi5Uyzl%

2FdMAAAAAAAAAAAAAAAADgAxMTQuMjQ1LjE0My41AAQAAAAAAAAAAAAAAAABAAABAAABAAABAAAAAA%3D%3D

NAP=是分析上一个包体得出来的,具体大家分析,这些是会变化的


然后
GET /home.aspx?ppud=4&wa=wsignin1.0&sa=233424720 HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel,

application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: skydrive.live.com
Connection: Keep-Alive

出现200 OK后,就显示出了文件夹页面,要解析包体的,有目录信息,可用空间大小,这些不会太难啦

http://cid-4a67f318d1191156.office.live.com/browse.aspx/abc
这种地址是进入目录,http的,不用https啦,微软这个框架只是在验证一些密码时用https

好啦,因为时间有限,暂且分析到这

总结

微软云存储用的是一个框架,而且很多网页元素如表单,都是用JS创建的,在中间的一些过程中,我使用了一个HttpWatch Studio 抓包工具,

特别是有一些POST,如果不抓包,只能分析JS得到地址
HttpWatch Studio有一个不足就是,无法解压gzip过的网页,抓取的包体是乱码。嘿
文章中把最难的第一步分析好啦,接下来的工作都是分析网页数据。

 

 

图1 这是云上返回用户认证成功的图片

 

图2  这是我用来登录云的一个简单工具

 

 

本人近来在开发一个SkyDrive文件传输工具,到时整个开发完后,会有更详细的开发文档,如果有需要学习这方面技术的,可以来找我

www.panshsoft.com 磐实网上有我QQ号

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值