闽公网安备 35020302035485号
代理服务器接收目标服务器的响应并将其返回给客户端。

const express = require('express');
const httpProxy = require('http-proxy');
const cookieParser = require('cookie-parser');
const app = express();
const proxy = httpProxy.createProxyServer();
// 使用 cookie-parser 中间件解析 Cookie
app.use(cookieParser());
// 代理请求的路由
app.all('/proxy/*', (req, res) => {
// 假设请求的目标是 https://api.example.com/data
const targetUrl = `https://api.example.com/${req.params[0]}`;
// 代理请求的选项,传递 Cookie 和其他必要的请求头
const options = {
target: targetUrl,
changeOrigin: true, // 使目标服务器看到的请求 Host 是目标服务器而不是代理服务器的 Host
headers: {
'Cookie': req.headers.cookie || '' // 将客户端发送的 Cookie 传递给目标服务器
}
};
// 将请求代理到目标服务器
proxy.web(req, res, options, (error) => {
console.error(`Proxy request to ${targetUrl} failed:`, error);
res.status(500).send('Proxy request failed');
});
});
// 堆代码 duidaima.com
// 代理服务启动
app.listen(3000, () => {
console.log('Proxy server is running on http://localhost:3000');
});
cookie-parser 用于解析请求中的 Cookie 并传递给目标服务器。changeOrigin: true 确保目标服务器认为请求直接来自客户端,而非代理服务器。
fetch('http://localhost:3000/proxy/data', {
method: 'GET',
credentials: 'include' // 保持 Cookie 在请求中传递
})
.then(response => response.json())
.then(data => console.log(data))
.catch(err => console.error('Request failed', err));
credentials: 'include' 用于确保浏览器将 Cookie 一并发送到代理服务器。const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
const port = 8080; // 假设目标服务器运行在 8080 端口
// 使用 cookie-parser 中间件解析 Cookie
app.use(cookieParser());
// 模拟的用户数据
const users = {
'session123': { id: 1, name: '前端界', email: 'xiaoming@163.com' },
'session456': { id: 2, name: '芝士', email: 'xiaohong@163.com' }
};
// 处理 /data 路由的请求
app.get('/data', (req, res) => {
const sessionCookie = req.cookies.sessionId; // 获取请求中的 Cookie,假设叫做 sessionId
if (!sessionCookie || !users[sessionCookie]) {
// 如果没有 Cookie 或者 Cookie 不正确,返回 401 未授权
return res.status(401).json({ error: 'Unauthorized: Invalid session' });
}
// 如果 Cookie 有效,返回该用户的数据
const userData = users[sessionCookie];
res.json({
message: 'Data fetched successfully',
user: userData
});
});
// 启动目标服务器
app.listen(port, () => {
console.log(`Target server running on http://localhost:${port}`);
});
目标服务器通过 cookie-parser 获取 sessionId,并返回对应的用户数据。如果 Cookie 无效,则返回 401 未授权错误。