Merge pull request #163 from twesix/master

添加了代理功能
This commit is contained in:
binaryify 2018-01-04 17:03:38 +08:00 committed by GitHub
commit 752d1965f7
4 changed files with 49 additions and 8 deletions

View File

@ -17,6 +17,13 @@
## 版本新特性 ## 版本新特性
### ? ? ? | 2018.01.04
添加了proxy功能
### 2.8.0 | 2018.01.04
用 'request' 重写了请求函数
### 2.6.5 | 2017.7.16 ### 2.6.5 | 2017.7.16
优化 CORS 设置 优化 CORS 设置

8
app.js
View File

@ -23,6 +23,14 @@ app.use(cache("2 minutes", onlyStatus200));
app.use(express.static(path.resolve(__dirname, "public"))); app.use(express.static(path.resolve(__dirname, "public")));
app.use(function(req, res, next) {
const proxy = req.query.proxy;
if (proxy) {
req.headers.cookie = req.headers.cookie + `__proxy__${proxy}`;
}
next();
});
// 获取专辑内容 // 获取专辑内容
app.use("/album", require("./router/album")); app.use("/album", require("./router/album"));

View File

@ -12,7 +12,27 @@
## 工作原理 ## 工作原理
跨站请求伪造 (CSRF), 伪造请求头,调用官方 API 跨站请求伪造 (CSRF), 伪造请求头,调用官方 API
## 可以使用代理
在query参数中加上proxy=your-proxy即可让这一次的请求使用proxy
```javascript
// 例子
const url = `http://localhost:3000/music/url?id=33894312&proxy=http://121.196.226.246:84`
fetch(url)
.then(function()
{
// do what you want
})
// 结果
// {"data":[{"id":33894312,"url":"http://m10.music.126.net/20180104125640/930a968b3fb04908b733506b3833e60b/ymusic/0fd6/4f65/43ed/a8772889f38dfcb91c04da915b301617.mp3","br":320000,"size":10691439,"md5":"a8772889f38dfcb91c04da915b301617","code":200,"expi":1200,"type":"mp3","gain":-2.0E-4,"fee":0,"uf":null,"payed":0,"flag":0,"canExtend":false}],"code": 200}
```
## 版本新特性 ## 版本新特性
### ? ? ? | 2018.01.04
添加了proxy功能
### 2.8.0 | 2018.01.04 ### 2.8.0 | 2018.01.04
用 'request' 重写了请求函数 用 'request' 重写了请求函数
@ -334,8 +354,8 @@ $ set PORT=4000 && node app.js
`/music/url` `/music/url`
**调用例子:** **调用例子:**
`/music/url?id=347230` `/music/url?id=33894312`
`/music/url?id=347230,347231` `/music/url?id=405998841,33894312`
返回数据如下图: 返回数据如下图:
![音乐 url](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/%E9%9F%B3%E4%B9%90%20url.png) ![音乐 url](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/%E9%9F%B3%E4%B9%90%20url.png)
@ -411,8 +431,8 @@ $ set PORT=4000 && node app.js
**调用例子:** **调用例子:**
`/search/multimatch?keywords=海阔天空` `/search/multimatch?keywords=海阔天空`
### 收藏单曲到歌单 ### 对歌单添加或删除歌曲
说明:调用此接口,传入音乐 id和 limit 参数, 可获得该专辑的所有评论(需要登录) 说明:调用此接口,可以添加歌曲到歌单或者从歌单删除某首歌曲(需要登录)
**必选参数:** **必选参数:**
`op`: 从歌单增加单曲为add,删除为 del `op`: 从歌单增加单曲为add,删除为 del
@ -436,7 +456,7 @@ $ set PORT=4000 && node app.js
`/lyric` `/lyric`
**调用例子:** **调用例子:**
`/lyric?id=347230` `/lyric?id=33894312`
返回数据如下图: 返回数据如下图:
![获取歌词](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/%E6%AD%8C%E8%AF%8D.png) ![获取歌词](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/%E6%AD%8C%E8%AF%8D.png)

View File

@ -2,6 +2,8 @@ const Encrypt = require("./crypto.js");
const request = require("request"); const request = require("request");
const querystring = require("querystring"); const querystring = require("querystring");
// request.debug = true;
function randomUserAgent() { function randomUserAgent() {
const userAgentList = [ const userAgentList = [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36",
@ -37,6 +39,9 @@ function createWebAPIRequest(
callback, callback,
errorcallback errorcallback
) { ) {
console.log(cookie);
const proxy = cookie.split("__proxy__")[1];
cookie = cookie.split("__proxy__")[0];
const cryptoreq = Encrypt(data); const cryptoreq = Encrypt(data);
const options = { const options = {
url: `http://${host}${path}`, url: `http://${host}${path}`,
@ -54,7 +59,8 @@ function createWebAPIRequest(
body: querystring.stringify({ body: querystring.stringify({
params: cryptoreq.params, params: cryptoreq.params,
encSecKey: cryptoreq.encSecKey encSecKey: cryptoreq.encSecKey
}) }),
proxy: proxy
}; };
request(options, function(error, res, body) { request(options, function(error, res, body) {