尝试启用 cookie 但收到未启用 cookie 的响应

Posted

技术标签:

【中文标题】尝试启用 cookie 但收到未启用 cookie 的响应【英文标题】:trying to enable cookies but getting a cookies not enabled response 【发布时间】:2015-08-27 23:13:41 【问题描述】:

在我的 node.js 服务器中,我正在尝试登录一个页面,我正在使用这样的请求:

var request = require('request');
request = request.defaults(jar: true);

然后我有这个:

request.post(url: loginUrl, formData: formData, function(err, httpResponse, body) 
  if (err) 
    return console.error('upload failed:', err);
  
  console.log('Upload successful!  Server responded with:', body);
);

在响应中,我可以看到它正确地发布了身份验证详细信息,但它说我无法登录,因为我必须启用 cookie。 'jar' 设置为 'true' 并且我根据请求文档 npm 安装了 'tough-cookie' 但这并没有解决它。任何想法都非常感谢!

【问题讨论】:

想一想当您使用浏览器登录此站点时的事件顺序。当您导航到该站点时,您会获取一个 URL,此时服务器可能正在发送一个 cookie。然后,当您登录时,您将身份验证数据与您在初始请求中获得的 cookie 一起发布 - 这是服务器如何知道您是否启用了 cookie 的方式。您正在做的是跳过 GET,因此在 POST 中没有要发送的 cookie,这就是为什么您会遇到 cookie 未启用问题 【参考方案1】:

首先要使用 cookie 发布帖子您必须获取 cookie 来存储它,然后发出请求。 尝试向这些表单所在的页面发出请求,然后发布到 loginUrl。 试试这个:

var request = require('request');
request = request.defaults(jar: true);

var urlWithLoginForm = 'http://some.domain.com/auth';
var loginUrl = urlWithLoginForm+'/attempt';
var formData = 'username': 'user1', 'password': 'blablabla';

request(urlWithLoginForm, function()  // initialising cookies by doing http get
  // so now we have cookies in jar, now we can make post request
  request.post(url: loginUrl, formData: formData, function(err, httpResponse, body) 
    if (err) 
      return console.error('upload failed:', err);
    
    console.log('Upload successful!  Server responded with:', body);
  );
);

【讨论】:

【参考方案2】:

您是否在用于访问网站的浏览器中启用了 cookie。这通常是“您需要启用 cookie”的意思

【讨论】:

啊,我明白了。我阅读问题的方式是他在 node.js 中有一个网页设置,他试图登录。仔细看,我现在看到他正在尝试从 node.js 访问另一个站点

以上是关于尝试启用 cookie 但收到未启用 cookie 的响应的主要内容,如果未能解决你的问题,请参考以下文章

Python 请求 403 启用 Cookie

浏览器未在启用 CORS 的情况下跨域跨域发送 cookie

UIWebview 启用cookies

在 Selenium 版本 3.7.0 无头驱动程序 phantomjs 版本 2.1 上启用 Cookie

HttpWebRequest 登录 - 在浏览器上启用 cookie

在 PhoneGap Build 中为 iOS 7 启用 cookie