我已经在节点中放置了一个代理服务器,需要能够通过tls传输https请求并且所有工作。使用以下两个软件包,这是非常容易设置:proxy,https-proxy-agent。我的问题是,我试图捕捉使用connect作为一个中间件层HAR文件和我得到了以下错误:Node.js代理与自定义Http代理和Connect.js中间件
_http_outgoing.js:357
throw new Error('Can\'t set headers after they are sent.');
^
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:357:11)
at ServerResponse.writeHead (_http_server.js:180:21)
at ClientRequest.<anonymous> (/.../node_modules/proxy/proxy.js:233:11)
at emitOne (events.js:96:13)
at ClientRequest.emit (events.js:188:7)
at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:473:21)
at HTTPParser.parserOnHeadersComplete (_http_common.js:99:23)
at Socket.socketOnData (_http_client.js:362:20)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
的很简单,只要以下和似乎只有当我发生m使用connect并通过本地浏览器进行代理(该代理实际上与BrowserStackLocal一起使用)。当我从本地机器浏览器以外的任何地方通过代理时,就像它甚至不知道中间件存在。
所以基本上,我只需要在这种情况下连接工作,我不知道如果我需要暂停和恢复,或什么...任何想法将不胜感激。基本代码如下:
const path = require('path');
const http = require('http');
const proxy = require('proxy');
const Agent = require('https-proxy-agent');
const connect = require('connect');
const har = require('./har');
const middleware = connect();
middleware.use(har({
harOutputDir: path.resolve(process.cwd(), 'har/')
}));
const server = proxy(http.createServer(middleware));
server.agent = new Agent('http://localhost:8081');
server.listen(8081)
谢谢!
编辑:只是说明:har中间件根本不修改标头。
是./har中间件响应对象上发送数据?如果是这样,将设置一个头文件,并且错误发生在第二个setHeader – Myonara
@Myonara no - 它所做的只是从响应和“next()”中读取数据,即使没有“./har”中间件地点。 – mike
在客户端,您能识别发送的内容,而不是第二个标题答案吗? – Myonara