在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:nsimmons/koa-better-http-proxy开源软件地址:https://github.com/nsimmons/koa-better-http-proxy开源编程语言:JavaScript 100.0%开源软件介绍:koa-better-http-proxyKoa middleware to proxy request to another host and pass response back. Based on express-http-proxy. Install$ npm install koa-better-http-proxy --save Usageproxy(host, options); To proxy URLS to the host 'www.google.com': var proxy = require('koa-better-http-proxy');
var Koa = require('koa');
var app = new Koa();
app.use(proxy('www.google.com')); If you wish to proxy only specific paths, you can use a router middleware to accomplish this. See Koa routing middlewares. OptionsagentUse a custom var agent = new http.Agent(options);
app.use(proxy('www.google.com', {
agent: agent,
})); portThe port to use for the proxied host. app.use(proxy('www.google.com', {
port: 443
})); headersAdditional headers to send to the proxied host. app.use(proxy('www.google.com', {
headers: {
'X-Special-Header': 'true'
}
})); strippedHeadersHeaders to remove from proxy response. app.use(proxy('www.google.com', {
strippedHeaders: [
'set-cookie'
]
})); preserveReqSessionPass the session along to the proxied request app.use(proxy('www.google.com', {
preserveReqSession: true
})); proxyReqPathResolver (supports Promises)Provide a proxyReqPathResolver function if you'd like to operate on the path before issuing the proxy request. Use a Promise for async operations. app.use(proxy('localhost:12345', {
proxyReqPathResolver: function(ctx) {
return require('url').parse(ctx.url).path;
}
})); Promise form app.use(proxy('localhost:12345', {
proxyReqPathResolver: function(ctx) {
return new Promise(function (resolve, reject) {
setTimeout(function () { // do asyncness
resolve(fancyResults);
}, 200);
});
}
})); filterThe For example, if you only want to proxy get request: app.use(proxy('www.google.com', {
filter: function(ctx) {
return ctx.method === 'GET';
}
})); userResDecorator (supports Promise)You can modify the proxy's response before sending it to the client. exploiting referencesThe intent is that this be used to modify the proxy response data only. Note: The other arguments (proxyRes, ctx) are passed by reference, so you can currently exploit this to modify either response's headers, for instance, but this is not a reliable interface. I expect to close this exploit in a future release, while providing an additional hook for mutating the userRes before sending. userResHeadersDecorator (supports Promise)You can modify the proxy's headers before sending it to the client. gzip responsesIf your proxy response is gzipped, this program will automatically unzip it before passing to your function, then zip it back up before piping it to the user response. There is currently no way to short-circuit this behavior. app.use(proxy('www.google.com', {
userResDecorator: function(proxyRes, proxyResData, ctx) {
data = JSON.parse(proxyResData.toString('utf8'));
data.newProperty = 'exciting data';
return JSON.stringify(data);
}
})); app.use(proxy('httpbin.org', {
userResDecorator: function(proxyRes, proxyResData) {
return new Promise(function(resolve) {
proxyResData.funkyMessage = 'oi io oo ii';
setTimeout(function() {
resolve(proxyResData);
}, 200);
});
}
})); limitThis sets the body size limit (default: app.use(proxy('www.google.com', {
limit: '5mb'
})); proxyReqOptDecorator (supports Promise form)You can mutate the request options before sending the proxyRequest. proxyReqOpt represents the options argument passed to the (http|https).request module. NOTE: req.path cannot be changed via this method; use app.use(proxy('www.google.com', {
proxyReqOptDecorator: function(proxyReqOpts, ctx) {
// you can update headers
proxyReqOpts.headers['content-type'] = 'text/html';
// you can change the method
proxyReqOpts.method = 'GET';
return proxyReqOpts;
}
})); You can use a Promise for async style. app.use(proxy('www.google.com', {
proxyReqOptDecorator: function(proxyReqOpts, ctx) {
return new Promise(function(resolve, reject) {
proxyReqOpts.headers['content-type'] = 'text/html';
resolve(proxyReqOpts);
})
}
})); proxyReqBodyDecorator (supports Promise form)You can mutate the body content before sending the proxyRequest. app.use(proxy('www.google.com', {
proxyReqBodyDecorator: function(bodyContent, ctx) {
return bodyContent.split('').reverse().join('');
}
})); You can use a Promise for async style. app.use(proxy('www.google.com', {
proxyReqBodyDecorator: function(proxyReq, ctx) {
return new Promise(function(resolve, reject) {
http.get('http://dev/null', function (err, res) {
if (err) { reject(err); }
resolve(res);
});
})
}
})); httpsNormally, your proxy request will be made on the same protocol as the original request. If you'd like to force the proxy request to be https, use this option. app.use(proxy('www.google.com', {
https: true
})); preserveHostHdrYou can copy the host HTTP header to the proxied express server using the app.use(proxy('www.google.com', {
preserveHostHdr: true
})); parseReqBodyThe This defaults to true in order to preserve legacy behavior. When false, no action will be taken on the body and accordingly Note that setting this to false overrides app.use(proxy('www.google.com', {
parseReqBody: false
})); reqAsBufferNote: this is an experimental feature. ymmv The This defaults to to false in order to preserve legacy behavior. Note that
the value of Ignored if app.use(proxy('www.google.com', {
reqAsBuffer: true
})); reqBodyEncodingEncoding used to decode request body. Defaults to Use The same encoding is used in the userResDecorator method. Ignored if app.use(proxy('httpbin.org', {
reqBodyEncoding: null
})); connectTimeoutBy default, node does not express a timeout on connections.
Use connectTimeout option to impose a specific timeout on the inital connection. ( app.use(proxy('httpbin.org', {
connectTimeout: 2000 // in milliseconds, two seconds
})); timeoutBy default, node does not express a timeout on connections.
Use timeout option to impose a specific timeout. This includes the time taken to make the connection and can be used with or without app.use(proxy('httpbin.org', {
timeout: 2000 // in milliseconds, two seconds
})); |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论