【问题标题】:Node.js request-promise jar cookies not workingNode.js 请求承诺 jar cookie 不起作用
【发布时间】:2017-08-06 09:42:54
【问题描述】:

我正在尝试进行两次 API 调用。第一个登录,最后一个执行授权操作。即使登录成功,对授权操作的调用也会产生 401 未授权错误。我认为这是因为我收到的 cookie 没有在最后一次通话中发回。我已经看到 cookie 存储在 jar 中。我用 Postman 试过,效果很好。

这是我的代码:

const request = require('request-promise');

const jar = request.jar();

const loginOptions = () => ({
    method: 'POST',
    url: 'https://www.some-api.com/login',
    jar,
    headers:
    {
        'content-type': 'application/json'
    },
    body: {
        username: "username",
        password: "password"
    },
    json: true
});

const authorizedOperationOptions = (param) => ({
    method: 'GET',
    url: 'https://www.some-api.com/authorized-operation?param=' + param
    timeout: 1000000,
    jar,
    headers:
    {
        'content-type': 'application/json'
    },
    json: true
});

export default async (date) => {
    await request(loginOptions());
    await request(authorizedOperationOptions("value"));
};

我想知道我做错了什么,但我也会接受另一种方法,使用不同的库,使用有效的示例代码。

请注意,该服务旨在仅支持网络浏览器,因此可能与该问题有关。

对于不熟悉 await 的人来说,它确保代码阻塞,直到 promise 被实现,并在被拒绝的情况下抛出。

【问题讨论】:

  • “我认为这是因为我收到的 cookie 没有在上次通话中发回。” -- 你能在一个简单的模拟服务器上试试吗?这样就可以清楚是客户端问题还是服务器问题。
  • @shaochuancs 我用 Postman 试过了,效果很好
  • @shaochuancs 我的意思是我尝试使用 Postman 到真实服务器,但我认为这是一个很好的证据,不是吗?
  • 第一次通话后你不能检查jar中是否存储了任何东西吗?
  • @robertklep 好吧,是的,我刚刚检查了一下,发现 cookie 存储在 jar 中

标签: javascript node.js http cookies request


【解决方案1】:

由于该服务被定义为仅支持 Web 浏览器,因此我不得不模拟 Web 浏览器。我通过添加 User-Agent 标头来管理它:

headers:
    {
        'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6'
    },

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 2017-12-06
    • 2016-06-07
    相关资源
    最近更新 更多