我有一个nodejs应用程序,它处理用户的请求并接收我想代理给内部API服务的cookie。如何通过使用node-fetch来实现这一点?请不要提供超级代理。
83qze16e1#
您应该能够通过在请求的头部设置来传递沿着cookie:
const opts = { headers: { cookie: 'accessToken=1234abc; userId=1234' } }; const result = await fetch(`/some/url`, opts);
字符串
0s0u357o2#
async function login() { return fetch('<some_url>/login', { 'headers': { 'accept': '*/*', 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', 'cookie': '', }, 'body': 'username=foo&password=bar', 'method': 'POST', }); } (async() => { const loginResponse = await login(); const loginCookies = parseCookies(loginResponse); })();
字符串您可能希望包含:accept-language、user-agent、referer、accept-encoding等(通过网络选项卡在Chrome DevTools上查看示例请求)由于某些原因,node-fetch请求的结果cookie与新请求不兼容,但我们可以这样解析它们:
accept-language
user-agent
referer
accept-encoding
function parseCookies(response) { const raw = response.headers.raw()['set-cookie']; return raw.map((entry) => { const parts = entry.split(';'); const cookiePart = parts[0]; return cookiePart; }).join(';'); }
型在您未来的请求中通过相同的头传递cookie:
return fetch('<some_url>/dashboard', { 'headers': { 'accept': '*/*', 'cookie': parsedCookies, }, 'method': 'GET', });
型
km0tfn4u3#
为了简单起见,你可以写一个中间件,它将包含global.fetch的cookie,如下所示。
const realFetch = fetch; function cookieFetch(fetch, cookie) { return (url, opts) => { opts = opts || {}; return fetch(url, Object.assign(opts, { headers: Object.assign(opts.headers || {}, { cookie }) })); }; } function middleware(req, res, next) { const kuki = req.headers.cookie; global.fetch = kuki ? cookieFetch(realFetch, kuki) : realFetch; next(); } module.exports = middleware;
3条答案
按热度按时间83qze16e1#
您应该能够通过在请求的头部设置来传递沿着cookie:
字符串
0s0u357o2#
像机器人一样读写cookie
字符串
您可能希望包含:
accept-language
、user-agent
、referer
、accept-encoding
等(通过网络选项卡在Chrome DevTools上查看示例请求)由于某些原因,node-fetch请求的结果cookie与新请求不兼容,但我们可以这样解析它们:
型
在您未来的请求中通过相同的头传递cookie:
型
km0tfn4u3#
为了简单起见,你可以写一个中间件,它将包含global.fetch的cookie,如下所示。
字符串