Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

能否开发一个chrome extension #54

Closed
zzmao opened this issue Apr 23, 2019 · 26 comments
Closed

能否开发一个chrome extension #54

zzmao opened this issue Apr 23, 2019 · 26 comments
Labels
enhancement New feature or request

Comments

@zzmao
Copy link

zzmao commented Apr 23, 2019

方便浏览器使用

@zzmao
Copy link
Author

zzmao commented Apr 23, 2019

目前只支持客户端使用吗?

@zzmao
Copy link
Author

zzmao commented Apr 23, 2019

重新读了一下readme,发现网页版不能支持。 能否通过chrome extension 降级 https 到http呢?

@nondanee
Copy link
Owner

nondanee commented Apr 23, 2019

首先
网页版的问题不是 https(自签证书就行);RSA 加密,没有私钥,代理无法修改请求内容,但是返回数据是可以改的,所以之后我可以一定程度上支持网页版;最最主要的问题是网页版的数据部分是内嵌在 js 或者 html 里面的而且加了密,不全是 XHR 请求,代理无法提取和解密,不过插件可以直接在 UI 层上修改

但是只有插件也做不到,这个问题很早就想过了
插件可以直接改 UI;支持跨域搜索别的平台;可以通过 inject script 覆盖原始方法来拦截 RSA 签名,同样地可以修改 XHR 的返回结果。但是问题是 Object.defineProperty set 和 get 都是同步的,跨域搜索是异步的,XHR 要马上 return ,根本不会等 Promise 拿没拿到数据。解决方法, 1 覆盖网易云自己的异步方法,但不是全局方法,所以无解,2 在发请求时直接重定向请求到自己的 server,异步搜索后端完成,插件做重定向时把 RSA 解密去掉,这样后端会轻松一点,但这样就需要 server,仅仅用插件做不到

@nondanee nondanee reopened this Apr 23, 2019
@nondanee
Copy link
Owner

sorry 手机码字不小心点到了😂😅

@zzmao
Copy link
Author

zzmao commented Apr 23, 2019

有点晕,思考了一下,感觉是有两个思路,1 插件修改网页内容, 2插件可以做代理客户端,和服务端交流。
1的问题是,优秀内容是加密的,不单纯xhr
2的问题是? 和播放器客户端不一样吗?

@nondanee
Copy link
Owner

nondanee commented Apr 23, 2019

@zzmao
sorry 有一部分没写完就 comment 了,你再看看上一条

1 的问题是,修改的内容必须同步返回,不能异步
2 的问题是插件可以跨域可以和服务器交流,但是做不了代理客户端

你觉得插件能做代理客户端的意思是指 proxyswitchy omega 吗?插件代理只是修改代理服务器设置啊
https://crxdoc-zh.appspot.com/extensions/proxy

@zzmao
Copy link
Author

zzmao commented Apr 23, 2019

在桌面端:
我们可以设置代理,连接server, server帮我们搜索歌曲返回歌曲
这样桌面客户端不用做任何修改,只是request全都被代理了。

所以我想,在chrome上,
如果我们的插件是个代理的角色,这样chrome所有的request走插件(代理),代理去和server request。 感觉是可以的。


我还没有看代码,node app.js 起来后,是会看/修改 request的内容的 对吧?

@nondanee
Copy link
Owner

nondanee commented Apr 23, 2019

插件做不了浏览器的代理,只能修改浏览器的代理设置
所有 request 插件可以看到,可以查看修改 headers,但不能查看和修改 body,也就不可能代理 request
插件能做的只有重定向所有流量自己的 server,然后自己 server 再去 request 网易 server
https://developer.chrome.com/extensions/webRequest

如果要修改 body 只能 inject 覆盖 XHR 的 onreadystatechange,然而这只能做同步的修改
https://stackoverflow.com/questions/18310484/modify-http-responses-from-a-chrome-extension/51594799#51594799


是的

@zzmao
Copy link
Author

zzmao commented Apr 24, 2019

要修改 body 只能 inject 覆盖 XHR 的 onreadystatechange https://stackoverflow.com/questions/18310484/modify-http-responses-from-a-chrome-extension/51594799#51594799

这部分让server来做不行么? (等request的body到了server,server改一改 就像对客户端请求的操作)

@nondanee
Copy link
Owner

nondanee commented Apr 24, 2019

对啊我就是说用 extension 还要自己开个 server,所以单独用 extension 实现不行啊
然后问题又来了,内置一个公共 server?谁来开,谁付钱呢

@zzmao
Copy link
Author

zzmao commented Apr 24, 2019

可以在local开server,就跟运行客户端需要在local或者server开node app.js 一样。

@zzmao
Copy link
Author

zzmao commented Apr 24, 2019

所以理论上是可行的喽? 那我开一个全局代理,由app.js代理,那么理论上网页端也可以正常运转的,对吧?

@mu-yu
Copy link

mu-yu commented Apr 24, 2019

需要浏览器插件的话,就用 listen1 呗……

@nondanee
Copy link
Owner

nondanee commented Apr 24, 2019

@zzmao

#54 (comment)
代理无法修改请求内容,但是返回数据是可以改的,所以之后我可以一定程度上支持网页版

之前没做是之前没有尝试过自签证书 v0.11.0,是直接拒绝 https 强制降级的,网页版没法降级
https://github.com/nondanee/UnblockNeteaseMusic/releases/tag/v0.11.0

其实对于网页版,代理本身就可以做到大部分功能,不需要扩展,现在的版本不行,之后会做
(要求:安装CA证书,开 https 端口)

插件如果不能独立作用或者要配合本地 server 就没有意义,那自己拿 tampermonkey 注入一下不就好了

@zzmao
Copy link
Author

zzmao commented Apr 24, 2019

学习了! @nondanee
你说的降级是什么意思? 本来是https的endpoint ,程序替换成http endpoint么?

@zzmao
Copy link
Author

zzmao commented Apr 24, 2019

插件如果不能独立作用或者要配合本地 server 就没有意义

那插件能否运行一个server 程序呢?这样就不用inject,重用现在的code就可以吧?

@nondanee
Copy link
Owner

@zzmao
降级是指网易云客户端发现 https API 有问题,会自动降级使用 http API,这是网易云客户端的策略
具体这个“有问题”的触发条件我不清楚,我用的是代理握手后关闭 socket

@nondanee
Copy link
Owner

nondanee commented Apr 24, 2019

@zzmao
https://stackoverflow.com/a/21186208

Note that this is a Chrome app, not a Chrome extension. Standalone chrome extensions cannot launch a server, though it is possible to start a server from an extension via external messaging (between extension and chrome app) or native messaging (between extension and some pre-installed application on the OS). – Rob W

这是那个 live show 的视频
https://www.youtube.com/watch?v=-wumTIhaKYc

这样看 extension 肯定没法运行 server,如果是 app 要开 server 还得自己写 socket,没法重用代码
而且 chrome app 很早就不让上架并且不让非 chrome os 用户下载使用了
就算做出来大部分用户都装不了

nondanee added a commit that referenced this issue Apr 24, 2019
@nondanee
Copy link
Owner

@zzmao
网页版支持已经加上了,在个人歌单页可以看到效果(个人歌单页用的 XHR)
独立的歌单歌手专辑页都是内嵌加密的,所以没有效果,需要用油猴在 UI 上解锁灰色的样式

我看了下上面的回答,可能有一些没有直接回答你的问题,我编辑过了,麻烦再看一下,感谢

@zzmao
Copy link
Author

zzmao commented Apr 24, 2019

@nondanee 非常感谢! 我试一下!
独立的歌单歌手专辑页 只是css被变灰? 没有资源被锁?

我的需求出发点是想在海外听(虽然有一个很好用的插件可以解锁有版权的),但是如果能解锁无版权的,那就更棒了,我试一下!非常感谢! 早点休息!

@zzmao
Copy link
Author

zzmao commented Apr 24, 2019

@nondanee
试了一下,感觉是哪里配置不对,可能没用cert?

node app.js 监听8080端口 (remote服务器)
proxyOmega 设置proxy由此服务器代理

app.js 可以看到log:
TUNNEL - music.163.com:443
TUNNEL - music.163.com:443
TUNNEL - music.163.com:443
TUNNEL - music.163.com:443

但是浏览器无法打开music.163.com

代理其他traffic没有问题。

@nondanee
Copy link
Owner

nondanee commented Apr 24, 2019

@zzmao
准确的说是 UI 的限制,客户端也是一样的,灰色的不发请求直接弹窗警告
css 样式屏蔽了点击,如果可以点击,就会发 request 到后端 server,proxy 能匹配到就能听了

哦你是说 NetEaseMusicWorldPlus 吗?那个也是我的啊 😂

@nondanee
Copy link
Owner

nondanee commented Apr 24, 2019

@zzmao
-p 8080:8081
仓库里的 ca 装一下

可以看这个
#48 (comment)

@zzmao
Copy link
Author

zzmao commented Apr 24, 2019

就是那个! 厉害了。。。
你是怎么发现X-REAL-IP是用来限制海外请求的?

@nondanee
Copy link
Owner

nondanee commented Apr 24, 2019

@zzmao plus 插件是 fork 以后改的,X-Real-IP 原插件就有
X-Real-IP 这个应该很多人知道啊
nondanee/vsc-netease-music#19

@nondanee
Copy link
Owner

@zzmao
研究了好久 UI 限制都不知道怎么去掉
然后去找了别人的代码 https://github.com/JixunMoe/cuwcl4c
发现连网易云的 ajax 入口都有,那么做成单独插件也可行
我好菜啊,@jixunmoe 大佬 nb!

我把解锁 UI 的部分提出来了,可以先配合 proxy server 使用
https://github.com/JixunMoe/cuwcl4c/blob/master/src/site/music.163.ts#L123-L161

安装地址
https://greasyfork.org/zh-CN/scripts/382285-neteasemusic-ui-unlocker

(但是我不会用 browserify,webpack 之类的,怎么重用代码呢 == 我打个 help wanted 吧)

@nondanee nondanee added the help wanted Extra attention is needed label Apr 27, 2019
@nondanee nondanee added the enhancement New feature or request label May 7, 2019
nondanee added a commit that referenced this issue May 12, 2019
@nondanee nondanee removed the help wanted Extra attention is needed label May 19, 2019
lizeyan pushed a commit to lizeyan/UnblockNeteaseMusic that referenced this issue Sep 10, 2019
lizeyan pushed a commit to lizeyan/UnblockNeteaseMusic that referenced this issue Sep 10, 2019
njzydark pushed a commit to njzydark/UnblockNeteaseMusic that referenced this issue Dec 3, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants