binux/lixian.xunlei

问个关于vod_redirect_play的问题

s2marine opened this issue · 26 comments

猜测返回的地址需要的cookie为sessionid, isvip, userid.
写入cookie后chrome, firefox都能正常播放, 但是ie9却不行, 先超时, 再刷新就不是会员了
发现是http://vod.xunlei.com/js/player.js文件里246行的:
"getJSONP(DYSERVER+"interface/getXlCookie?t="+new Date().getTime(),'XL_CLOUD_FX_INSTANCEqueryXlCookieBack',function(r){"
这句出了问题, getXlCookie每次第一次请求回来的结果都是"({"result":0})"而不是那三个cookie组成的字典
自己在本地模拟测试过, 把t参数去掉, 先在IE中打开http://dynamic.vod.lixian.xunlei.com/interface/getXlCookie?&jsonp=XL_CLOUD_FX_INSTANCEqueryXlCookieBack, 再开iPlay.html就能正常通过验证
手动在vod.xunlei.com登录是可以的正常播放的, getXlCookie也能正常返回

然后......然后我就不知道怎么办了

为什么不保存所有的cookie?

试过xunlei.com域下的都写入, 一样

还有补充下, 离线网页里的那个快速播放返回的链接很正常, 写入cookie后IE也能播放

你怎么写入cookie的?我的意思是,按照set-cookie和js中指定的域去写一个一样的不就好了。

不行抓个包看看出传出去的cookie有什么差异

如果直接在IE里xunlei.com域名下直接document.cookie也可以播放
我是用python的
ctypes.windll.Wininet.InternetSetCookieA(domain, None, name+'='+value+'; path=/; domain=.xunlei.com; expires='+cookieTime)
写入cookie的
抓包了, 看不太懂, 发现cookie根本没有发出去
http://i.imm.io/l8H0.png

你确定ctypes.windll.Wininet.InternetSetCookieA这样能写cookie?
写完了alert(document.cookie)看看写进去了没有。

写进去了, 能看到cookie的值

写进去了,但是发出去的包没有?
domain和path对吗

应该没错, 因为手动刷新那个网址可以获取正确的返回值

document.cookie = “”这样可以,ctypes.windll.Wininet.InternetSetCookieA 这样不行是吗?

你确认写完之后所有的cookie包括domain,path都是一样的?

嗯, document.cookie手动在IE里写可以, 用InternetSetCookieA不行
http://xunlei.com 下document.cookie写入的话, 对InternetSetCookieA来说domain应该也是http://xunlei.com
剩下都一样了

不是让你应该是怎么样,而是去验证。

你path=/ 的cookie根本不可能传到/interface/这个路径下,如果document.cookie有效,那它们写的cookie肯定不一样。

传是有传到, path可以继承的
不清楚怎么验证cookie有没有一样
http://i.imm.io/l8WN.png
写cookie的程序也贴上来帮忙看看有没有错
http://i.imm.io/l8WQ.png
cookie.txt是一个name TAB value TAB domain的文件

第一章图是document.cookie的?
那就用ctypes.windll.Wininet.InternetSetCookieA写入再来一次不就好了

不是, 是ctypes.windll.Wininet.InternetSetCookieA写入的
这个是document.cookie http://i.imm.io/l8Zg.png
完全看不出差别, 写入后刷新下显示的也是一样的

重贴一张, 刚拿张截图没加入 path, 不过结果也是一样的 http://i.imm.io/l90o.png

你这不是ctypes.windll.Wininet.InternetSetCookieA有效吗?
写完cookie,刷新之后再看document.cookie

是有效, 刷新也有
可是主要是player.js的getJSONP不认, 跨域获取的时候请求没带入cookie

那就先访问一次不就ok了,你都有客户端了

有个t参数, 每次都会变的, 没法先访问

那不过是一个防止cache的东西而已,管他呢

又点错..
那就等于要在本地建立个服务器然后调用迅雷那了? 我本来想着写个cookie就能看了
现在的变通方法是使用迅雷离线网页上那个快速播放返回网址, 那个写入cookie后可以正常播放的

我现在还是不明白有什么问题。。
你既然都有客户端了。。想干什么不可以吗。。

问题就是写入cookie后, 看起来成功了, 但是跨域调用时候的行为和没有写入一样
本来想弄简单一点的, 只是获取那个url打开IE就能看了

调用的时候无效,但是直接访问可以。
并且先直接访问一次再调用又可以。是这样吗?

另,方便邮件或者gtalk吗?

Gtalk: s2marine0 # gmail.com