【问题标题】:Can't get set-cookie from header in response with NodeJS无法从标头获取 set-cookie 以响应 NodeJS
【发布时间】:2015-02-10 02:09:17
【问题描述】:

我在节点中尝试了 3 个不同的 http 库

  1. 节点请求
  2. 节点请求
  3. 结针

所有 3 个库都无法从我的响应中获取我的 set-cookie

请求

15:32:52 - WARN  - now testing with request
{ 'x-powered-by': 'Express',
  'content-type': 'application/json; charset=utf-8',
  'content-length': '4591',
  date: 'Thu, 11 Dec 2014 14:32:52 GMT',
  connection: 'keep-alive' }

15:32:52 - WARN  - now testing with needle
{ 'x-powered-by': 'Express',
  'content-type': 'application/json; charset=utf-8',
  'content-length': '4591',
  date: 'Thu, 11 Dec 2014 14:32:52 GMT',
  connection: 'close' }

请求

15:32:52 - WARN  - now testing with requestify
{ 'x-powered-by': 'Express',
  'content-type': 'application/json; charset=utf-8',
  'content-length': '4591',
  date: 'Thu, 11 Dec 2014 14:32:52 GMT',
  connection: 'keep-alive' }

这是带有 wget 的结果标题

Connecting to localhost (localhost)|127.0.0.1|:8000... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  X-Powered-By: Express
  Accept-Ranges: bytes
  Date: Thu, 11 Dec 2014 14:38:49 GMT
  Cache-Control: public, max-age=0
  Last-Modified: Thu, 11 Dec 2014 09:56:58 GMT
  ETag: W/"7c2-2140188116"
  Content-Type: text/html; charset=UTF-8
  Content-Length: 1986
  set-cookie: session=s%3AHI2alIkPOxVLXgJCymvAPbTZt1urIpEE.dBB7ZrpWjKAkwSALBVgbyJtRq9ZABMq9VJh%2F3XT6r8A; Path=/; Expires=Thu, 11 Dec 2014 15:08:49 GMT; HttpOnly
  Connection: keep-alive
Length: 1986 (1.9K) [text/html]

如果这有帮助,这是我的请求中的标头

var commonHeaders = {
    'Accept': '*/*',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'fr',
    'Cache-Control': 'no-cache',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Connection': 'keep-alive',
    'Pragma': 'no-cache',
    'User-Agent': 'request'
};

虽然 firefox、chrome 和 wget 可以获得完整的标头,但我无法使用 node 进行身份验证。 是 Node 的问题吗?我应该在 Python 中这样做吗?

编辑:

我试图删除通过节点发布的数据,我也有与 wget 相同的响应。 当我使用浏览器并执行登录操作时,它会返回我的 json + set-cookie。

为什么节点不可能做到这一点?

【问题讨论】:

  • 我认为您正在请求两个不同的 URL/请求。 wget 看到text/html 和其他标头,而节点请求看到application/json 和更少的标头。
  • 是的,这是正确的,如果我删除了我的请求中发布的数据,我还会收到来自 node.js 的 setCookie。但它是 statusCode 401 和用户或重定向到登录。问题是,它应该返回一个 set-cookie,如果我使用浏览器的登录操作,我可以看到它

标签: node.js http cookies httpresponse setcookie


【解决方案1】:

您可能没有正确使用 cookie。通常它们不会作为头变量直接访问。有关如何处理 cookie,请参阅 request 文档,那里有很好的示例。

默认情况下禁用 Cookie(否则,它们将用于 后续请求)。要启用 cookie,请将 jar 设置为 true(在 默认值或选项)并安装坚韧的cookie。

【讨论】:

  • 感谢您的回复,我已尝试使用 jar 和 strong-cookie。在我的回复中,仍然没有设置 cookie。你说他们是那里的好榜样,我不认为他们是。
  • 我已经为您的建议做了一个 jsfiddle,尝试了一些组合但没有任何工作,仍然未经授权。 jsfiddle.net/u8x3oxb1
  • 嗯,这不是节点问题。问题出在身份验证的某个地方。未经授权的在 loginScript 或数据请求上。您使用什么库进行身份验证?
  • 快速会话。这很有趣,因为如果我通过了身份验证,我就没有 cookie,否则,我有一个,但我不需要它。 ://
  • 你能把负责授权的部分代码和负责登录的部分贴出来吗?否则很难说。
猜你喜欢
  • 2014-02-26
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
相关资源
最近更新 更多