【问题标题】:Can I send a GET request with cookies in the headers in Node?我可以在 Node 的标头中发送带有 cookie 的 GET 请求吗?
【发布时间】:2023-03-13 15:47:01
【问题描述】:

在浏览器中,如果我发送 GET 请求,请求会同时发送 cookie。现在想模拟一个来自Node的GET请求,那代码怎么写呢?

【问题讨论】:

    标签: node.js


    【解决方案1】:

    使用奇妙的request 库cookie 默认启用。你可以像这样发送自己的(取自 Github 页面):

    var j = request.jar()
    var cookie = request.cookie('your_cookie_here')
    j.add(cookie)
    request({url: 'http://www.google.com', jar: j}, function () {
      request('http://images.google.com')
    })
    

    【讨论】:

    • 啊:不确定。我从未尝试过使用默认的 http 客户端来处理我的请求。
    • 我刚刚开始了解有关 HTTP 的更多信息。我认为如果默认的http 模块有这样做的方法,我可以知道更多的细节。
    • 你如何获得cookies?我想将它们保存到一个文件中,以后再使用它们。
    • add 方法不再起作用。使用:j.setCookie(cookie, 'currentdomain.example.com/path', function(error, cookie) {});
    【解决方案2】:

    如果您想使用本机 http:request() 方法来执行此操作,则需要在 options 的 headers 成员中设置适当的 Set-Cookie 标头(请参阅 HTTP 参考以了解它们的外观)争论;本机代码中没有处理 cookie 的特定方法。如果需要具体示例,请参阅 Mikeal 的 request 库中的源代码和或 connect 中的 cookieParser 代码。

    但 Femi 几乎可以肯定是正确的:处理 cookie 充满了相当挑剔的细节,而且您几乎总是会更好地使用已经编写好的代码,更重要的是,经过测试。如果您尝试重新发明这个特定的轮子,您很可能会想出似乎大部分时间都可以工作的代码,但偶尔会莫名其妙地失败。

    【讨论】:

      【解决方案3】:
      var jar = request.jar();
      const jwtSecret = fs.readFileSync(`${__dirname}/.ssh/id_rsa`, 'utf8');
      const token = jwt.sign(jwtPayload, jwtSecret, settings);
      jar.setCookie(`any-name=${token}`, 'http://localhost:12345/');
      const options = {
        method: 'GET',
        url: 'http://localhost:12345',
        jar,
        json: true
      };
      request(options, handleResponse);
      

      【讨论】:

      • 请添加更多描述和/或有关您的答案以及它如何解决所问问题的信息,以便其他人可以轻松理解它而无需要求澄清
      猜你喜欢
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多