1
totoro625 2023-01-14 15:00:53 +08:00
|
2
oneisall8955 OP @totoro625 #1 感谢回复,我试试,感觉可以满足
|
3
oneisall8955 OP @oneisall8955 #2
在使用过程中,会发现 siteproxy 会劫持 response body ,进行内容修改,主要是将内容包含链接的全替换成 b 域名前缀。 如 b 的 siteproxy 服务是 https://siteproxy.bhost.com 请求原始 response body 是 {"url":"https://www.baidu.com?q=siteproxy"} 则在 siteproxy 进行替换成 {"url":"https://siteproxy.bhost.com/https/www.baidu.com?q=siteproxy"} 这可能不是 A 服务想要的。 通过修改 siteproxy 源码解决,修改项目的 Proxy.js ,注释掉 handleResponse 方法中的过滤替换代码即可。 如下: ```js //# for(let key in regReplaceMap) { //# myRe = new RegExp(key, 'g') // match group //# body = body.replace(myRe, regReplaceMap[key]) //# } //# logSave(`##### host:${host}`) //# if (host) { //# body = pathReplace({host, httpType, body}) //13ms //# } //# logSave(`2`) //# logSave(`3`) //# myRe = new RegExp(`/${httpType}/${host}/${httpType}/${host}/`, 'g') // match group //# body = body.replace(myRe, `/${httpType}/${host}/`) //# //# logSave(`4`) //1ms //# // put siteSpecificReplace at end //# Object.keys(siteSpecificReplace).forEach( (site) => { //# if (!req.url) { //# return //# } //# if (req.url.indexOf(site) !== -1 || (req.headers['referer'] && req.headers['referer'].indexOf(site) !== -1)) { //# keys = Object.keys(siteSpecificReplace[site]) //# keys.forEach( key => { //# myRe = new RegExp(key, 'g') // match group //# body = body.replace(myRe, siteSpecificReplace[site][key]) //# }) //# } //# }) //17ms //# //# logSave(`5`) //# if (gbFlag) { //# body = iconv.encode(body, 'gbk') //# } //# // googlevideo.com manual redirection //# if (typeof(body) === 'string' && body.startsWith(`${httpprefix}://${serverName}`) && body.indexOf('googlevideo.com') !== -1) { //# // need to manually redirect it for youtube workaround. //# console.log(`============== redirect googlevideo.com`) //# try { //# res.setHeader('location', body) //0ms //# } catch(e) { //# logSave(`error: ${e}`) //# return //# } //# res.statusCode = '302' //# } //# logSave(`5 after replacment,displayed string, body.length:${body.length}`) ``` |
4
oneisall8955 OP @oneisall8955 #3 方法名打错,方法名是 handleRespond ,不是 handleResponse
|
5
oneisall8955 OP 最近发现,用 https://github.com/hunshcn/gh-proxy 仓库,搭配 cloudflare 的 worker ,自定义域名,修改其中的代码,也可以完成类似的需求:
```js const customProxyDomainArray=[ // 代理所有的 http 或 https 开头的东西 /^(?:https?:\/\/).*$/i, ] function checkCustomUrl(u) { for (let i of customProxyDomainArray ) { if (u.search(i) === 0) { return true } } return false } async function fetchHandler(e) { // ... 省略 else if (checkCustomUrl(path)) { return httpHandler(req, path) } else { return fetch(ASSET_URL + path) } } ``` |