首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用node-fetch发送cookie?

如何使用node-fetch发送cookie?
EN

Stack Overflow用户
提问于 2016-01-16 00:42:56
回答 3查看 42.9K关注 0票数 55

我已经有了nodejs应用程序,它处理用户的请求并接收cookie,我想将其代理到内部API服务。如何通过使用node-fetch来实现此目的?

请不要提供superagent。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-08 04:21:40

您应该能够通过在请求的头部中设置cookie来传递cookie:

代码语言:javascript
复制
const opts = {
    headers: {
        cookie: 'accessToken=1234abc; userId=1234'
    }
};
const result = await fetch(`/some/url`, opts);
票数 76
EN

Stack Overflow用户

发布于 2019-04-15 05:49:47

像机器人一样读写cookie

代码语言:javascript
复制
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-languageuser-agentrefereraccept-encoding等(通过网络选项卡在您的Chrome DevTools上查看示例请求)

由于某些原因,节点获取请求的结果cookie与新请求不兼容,但我们可以这样解析它们:

代码语言:javascript
复制
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:

代码语言:javascript
复制
  return fetch('<some_url>/dashboard', {
    'headers': {
        'accept': '*/*',
        'cookie': parsedCookies,
    },
    'method': 'GET',
  });
票数 27
EN

Stack Overflow用户

发布于 2016-08-28 17:05:37

为了简单起见,您可以编写一个中间件,其中将包含cookie到global.fetch,如下所示。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34815845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档