优化代理
This commit is contained in:
parent
0646ebc59b
commit
42cb19214f
@ -1,4 +1,3 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
FROM node:lts-bookworm AS builder
|
||||
WORKDIR /src
|
||||
|
@ -2,12 +2,13 @@ version: '3'
|
||||
|
||||
services:
|
||||
suno-api:
|
||||
build:
|
||||
context: .
|
||||
args:
|
||||
SUNO_COOKIE: ${SUNO_COOKIE}
|
||||
image: registry.cn-shanghai.aliyuncs.com/easyaigc/suno-api:latest
|
||||
# build:
|
||||
# context: .
|
||||
# args:
|
||||
# SUNO_COOKIE: ${SUNO_COOKIE}
|
||||
volumes:
|
||||
- ./public:/app/public
|
||||
ports:
|
||||
- "3000:3000"
|
||||
- "3013:3000"
|
||||
env_file: ".env"
|
71
package-lock.json
generated
71
package-lock.json
generated
@ -18,6 +18,7 @@
|
||||
"cookie": "^1.0.2",
|
||||
"electron": "^33.2.1",
|
||||
"ghost-cursor-playwright": "^2.1.0",
|
||||
"https-proxy-agent": "^7.0.6",
|
||||
"js-cookie": "^3.0.5",
|
||||
"next": "14.1.4",
|
||||
"next-swagger-doc": "^0.4.0",
|
||||
@ -27,6 +28,7 @@
|
||||
"react-dom": "^18",
|
||||
"react-markdown": "^9.0.1",
|
||||
"rebrowser-playwright-core": "^1.49.1",
|
||||
"socks-proxy-agent": "^8.0.5",
|
||||
"swagger-ui-react": "^5.18.2",
|
||||
"tough-cookie": "^4.1.4",
|
||||
"user-agents": "^1.1.156",
|
||||
@ -1600,6 +1602,15 @@
|
||||
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/agent-base": {
|
||||
"version": "7.1.4",
|
||||
"resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-7.1.4.tgz",
|
||||
"integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 14"
|
||||
}
|
||||
},
|
||||
"node_modules/ajv": {
|
||||
"version": "6.12.6",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
||||
@ -4609,6 +4620,19 @@
|
||||
"node": ">=10.19.0"
|
||||
}
|
||||
},
|
||||
"node_modules/https-proxy-agent": {
|
||||
"version": "7.0.6",
|
||||
"resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
|
||||
"integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"agent-base": "^7.1.2",
|
||||
"debug": "4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 14"
|
||||
}
|
||||
},
|
||||
"node_modules/ieee754": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
|
||||
@ -4729,6 +4753,15 @@
|
||||
"loose-envify": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/ip-address": {
|
||||
"version": "10.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/ip-address/-/ip-address-10.0.1.tgz",
|
||||
"integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 12"
|
||||
}
|
||||
},
|
||||
"node_modules/is-alphabetical": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
|
||||
@ -8402,6 +8435,44 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/smart-buffer": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz",
|
||||
"integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 6.0.0",
|
||||
"npm": ">= 3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/socks": {
|
||||
"version": "2.8.7",
|
||||
"resolved": "https://registry.npmmirror.com/socks/-/socks-2.8.7.tgz",
|
||||
"integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ip-address": "^10.0.1",
|
||||
"smart-buffer": "^4.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.0.0",
|
||||
"npm": ">= 3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/socks-proxy-agent": {
|
||||
"version": "8.0.5",
|
||||
"resolved": "https://registry.npmmirror.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz",
|
||||
"integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"agent-base": "^7.1.2",
|
||||
"debug": "^4.3.4",
|
||||
"socks": "^2.8.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 14"
|
||||
}
|
||||
},
|
||||
"node_modules/sonic-boom": {
|
||||
"version": "3.8.1",
|
||||
"resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz",
|
||||
|
@ -9,7 +9,7 @@
|
||||
"version": "1.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
"dev": "PORT=3013 next dev",
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"lint": "next lint"
|
||||
@ -24,6 +24,7 @@
|
||||
"cookie": "^1.0.2",
|
||||
"electron": "^33.2.1",
|
||||
"ghost-cursor-playwright": "^2.1.0",
|
||||
"https-proxy-agent": "^7.0.6",
|
||||
"js-cookie": "^3.0.5",
|
||||
"next": "14.1.4",
|
||||
"next-swagger-doc": "^0.4.0",
|
||||
@ -33,6 +34,7 @@
|
||||
"react-dom": "^18",
|
||||
"react-markdown": "^9.0.1",
|
||||
"rebrowser-playwright-core": "^1.49.1",
|
||||
"socks-proxy-agent": "^8.0.5",
|
||||
"swagger-ui-react": "^5.18.2",
|
||||
"tough-cookie": "^4.1.4",
|
||||
"user-agents": "^1.1.156",
|
||||
|
5345
pnpm-lock.yaml
5345
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
@ -11,6 +11,7 @@ import { BrowserContext, Page, Locator, chromium, firefox } from 'rebrowser-play
|
||||
import { createCursor, Cursor } from 'ghost-cursor-playwright';
|
||||
import { promises as fs } from 'fs';
|
||||
import path from 'node:path';
|
||||
import { SocksProxyAgent } from 'socks-proxy-agent';
|
||||
|
||||
// sunoApi instance caching
|
||||
const globalForSunoApi = global as unknown as { sunoApiCache?: Map<string, SunoApi> };
|
||||
@ -86,6 +87,29 @@ class SunoApi {
|
||||
this.userAgent = new UserAgent(/Macintosh/).random().toString(); // Usually Mac systems get less amount of CAPTCHAs
|
||||
this.cookies = cookie.parse(cookies);
|
||||
this.deviceId = this.cookies.ajs_anonymous_id || randomUUID();
|
||||
const proxyUrl = process.env.PROXY_URL;
|
||||
let extraConfig: Record<string, any> = {};
|
||||
if (proxyUrl) {
|
||||
if (proxyUrl.startsWith('socks')) {
|
||||
// SOCKS5 代理
|
||||
const agent = new SocksProxyAgent(proxyUrl);
|
||||
extraConfig = {
|
||||
httpAgent: agent,
|
||||
httpsAgent: agent,
|
||||
proxy: false // 一定要关掉 axios 自带的 proxy
|
||||
};
|
||||
} else {
|
||||
// HTTP/HTTPS 代理
|
||||
const url = new URL(proxyUrl);
|
||||
extraConfig = {
|
||||
proxy: {
|
||||
protocol: url.protocol.replace(':', ''), // 去掉末尾冒号
|
||||
host: url.hostname,
|
||||
port: Number(url.port)
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
this.client = axios.create({
|
||||
withCredentials: true,
|
||||
headers: {
|
||||
@ -97,7 +121,8 @@ class SunoApi {
|
||||
'sec-ch-ua-mobile': '?1',
|
||||
'sec-ch-ua-platform': '"Android"',
|
||||
'User-Agent': this.userAgent
|
||||
}
|
||||
},
|
||||
...extraConfig,
|
||||
});
|
||||
this.client.interceptors.request.use(config => {
|
||||
if (this.currentToken && !config.headers.Authorization)
|
||||
@ -273,10 +298,14 @@ class SunoApi {
|
||||
args.push('--enable-unsafe-swiftshader',
|
||||
'--disable-gpu',
|
||||
'--disable-setuid-sandbox');
|
||||
try {
|
||||
const browser = await this.getBrowserType().launch({
|
||||
args,
|
||||
headless: yn(process.env.BROWSER_HEADLESS, { default: true })
|
||||
});
|
||||
headless: yn(process.env.BROWSER_HEADLESS, { default: true }),
|
||||
...(process.env.PROXY_URL &&{ proxy: {
|
||||
server: process.env.PROXY_URL,
|
||||
}})
|
||||
})
|
||||
const context = await browser.newContext({ userAgent: this.userAgent, locale: process.env.BROWSER_LOCALE, viewport: null });
|
||||
const cookies = [];
|
||||
const lax: 'Lax' | 'Strict' | 'None' = 'Lax';
|
||||
@ -298,6 +327,10 @@ class SunoApi {
|
||||
}
|
||||
await context.addCookies(cookies);
|
||||
return context;
|
||||
}catch ( e){
|
||||
console.log(e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user