私は、tls以上のhttps要求をトンネリングする機能を必要とするすべてのプロキシサーバーをまとめてNodeに配置しました。次の2つのパッケージを使用すると、セットアップが非常に簡単でした:proxy、https-proxy-agent。私の問題は、私はミドルウェア層としてconnectを使用してHARファイルをキャプチャしようとしていると私は、次のエラーを取得していますということです。Node.jsカスタムHttp(s)エージェントと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ミドルウェアですが?そうであれば、ヘッダーが設定され、2番目のsetHeaderエラーが発生します。 – Myonara
@Myonaraいいえ、応答からデータが読み込まれ、 "./har"ミドルウェアがなくても問題が存在します。場所。 – mike
クライアント側では、2番目のヘッダーの代わりに送信されたものを識別できますか? – Myonara