diff --git a/packages/mitmproxy/src/lib/interceptor/impl/res/script.js b/packages/mitmproxy/src/lib/interceptor/impl/res/script.js
index 7037f8a8..b6ed09c5 100644
--- a/packages/mitmproxy/src/lib/interceptor/impl/res/script.js
+++ b/packages/mitmproxy/src/lib/interceptor/impl/res/script.js
@@ -60,7 +60,11 @@ module.exports = {
head: tags + '\r\n'
}
} catch (err) {
- res.setHeader('DS-Script-Interceptor', 'error')
+ try {
+ res.setHeader('DS-Script-Interceptor', 'error')
+ } catch (e) {
+ // ignore
+ }
log.error('load monkey script error', err)
}
},
diff --git a/packages/mitmproxy/src/lib/interceptor/index.js b/packages/mitmproxy/src/lib/interceptor/index.js
index da2d3a11..19a84c71 100644
--- a/packages/mitmproxy/src/lib/interceptor/index.js
+++ b/packages/mitmproxy/src/lib/interceptor/index.js
@@ -12,9 +12,9 @@ const proxy = require('./impl/req/proxy')
const sni = require('./impl/req/sni')
// response interceptor impls
+const responseReplace = require('./impl/res/responseReplace')
const cacheRes = require('./impl/res/cacheRes')
const script = require('./impl/res/script')
-const responseReplace = require('./impl/res/responseReplace')
module.exports = [
// request interceptor impls
diff --git a/packages/mitmproxy/src/lib/monkey/index.js b/packages/mitmproxy/src/lib/monkey/index.js
index 9b1a0402..db0c2ae8 100644
--- a/packages/mitmproxy/src/lib/monkey/index.js
+++ b/packages/mitmproxy/src/lib/monkey/index.js
@@ -36,7 +36,7 @@ function loadScript (content, scriptName) {
const sc = {
grant: [],
match: [],
- content: ''
+ script: ''
}
for (const string of confItemArr) {
const reg = new RegExp('.*@([^\\s]+)\\s(.+)')
@@ -80,7 +80,8 @@ const api = {
// scripts.jquery = { script: readFile(rootDir, 'jquery.min.js') }
scripts.global = { script: readFile(rootDir, 'global.script') }
return scripts
- }
+ },
+ loadScript
}
module.exports = api
diff --git a/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js b/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js
index 3c5ee700..029bda38 100644
--- a/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js
+++ b/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js
@@ -64,7 +64,7 @@ module.exports = function createRequestHandler (createIntercepts, middlewares, e
if (!reqIncpt.requestIntercept) {
continue
}
- const goNext = reqIncpt.requestIntercept(context, req, res, ssl)
+ const goNext = reqIncpt.requestIntercept(context, req, res, ssl, next)
if (goNext) {
next()
return
@@ -252,7 +252,12 @@ module.exports = function createRequestHandler (createIntercepts, middlewares, e
let head = ''
let body = ''
for (const resIncpt of resIncpts) {
- const append = resIncpt.responseIntercept(context, req, res, proxyReq, proxyRes, ssl)
+ const append = resIncpt.responseIntercept(context, req, res, proxyReq, proxyRes, ssl, next)
+ // 判断是否已经关闭
+ if (res.writableEnded) {
+ next()
+ return
+ }
if (append) {
if (append.head) {
head += append.head
@@ -260,10 +265,8 @@ module.exports = function createRequestHandler (createIntercepts, middlewares, e
if (append.body) {
body += append.body
}
- }
- if (res.writableEnded) {
- next()
- return
+ } else if (append === false) {
+ break // 返回false表示终止拦截器,跳出循环
}
}
InsertScriptMiddleware.responseInterceptor(req, res, proxyReq, proxyRes, ssl, next, {
@@ -302,14 +305,19 @@ module.exports = function createRequestHandler (createIntercepts, middlewares, e
}
})().catch(e => {
if (!res.writableEnded) {
- const status = e.status || 500
- res.writeHead(status, { 'Content-Type': 'text/html;charset=UTF8' })
- res.write(`DevSidecar Error:
+ log.error('Request error:', e)
+
+ try {
+ const status = e.status || 500
+ res.writeHead(status, { 'Content-Type': 'text/html;charset=UTF8' })
+ res.write(`DevSidecar Error:
目标网站请求错误:【${e.code}】 ${e.message}
目标地址:${rOptions.protocol}//${rOptions.hostname}:${rOptions.port}${rOptions.path}`
- )
- res.end()
- log.error('Request error:', e)
+ )
+ res.end()
+ } catch (e) {
+ // do nothing
+ }
}
})
}