首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Node.js Axios post请求到带有cookie的API

Node.js Axios post请求到带有cookie的API
EN

Stack Overflow用户
提问于 2021-09-01 08:47:40
回答 1查看 113关注 0票数 0

我想提供与Axios的POST请求cookie。我有一个使用CURL的zeppelin API,如下所示:

代码语言:javascript
运行
复制
curl -i --data 'userName=admin&password=admin' -X POST http://zeppelin.XXXXX.net/api/login

和响应

代码语言:javascript
运行
复制
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: authorization,Content-Type
Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, HEAD, DELETE
Content-Length: 127
Content-Type: application/json
Date: Wednesday, September 1, 2021 8:20:55 AM UTC
Server: Jetty(9.4.14.v20181114)
Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Tue, 31-Aug-2021 08:20:55 GMT
Set-Cookie: JSESSIONID=a3a4392d-1347-47b6-b85b-61230e16802b; Path=/; HttpOnly
Set-Cookie: JSESSIONID=deleteMe; Path=/; Max-Age=0; Expires=Tue, 31-Aug-2021 08:20:55 GMT
Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Tue, 31-Aug-2021 08:20:55 GMT
Set-Cookie: JSESSIONID=14acf05d-3cb3-4548-b8e3-6066caf90000; Path=/; HttpOnly
Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Tue, 31-Aug-2021 08:20:55 GMT
X-Frame-Options: SAMEORIGIN
X-Xss-Protection: 1

在zeppelin中使用注释

代码语言:javascript
运行
复制
curl -i -b 'JSESSIONID=14acf05d-3cb3-4548-b8e3-6066caf90000; Path=/; HttpOnly' -X POST http://zeppelin.XXXXXX.net/api/notebook/job/2G9P1992Z/20210615-091750_1582099873

成功使用

代码语言:javascript
运行
复制
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: authorization,Content-Type
Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, HEAD, DELETE
Content-Length: 15
Content-Type: application/json
Date: Wednesday, September 1, 2021 8:28:07 AM UTC
Server: Jetty(9.4.14.v20181114)
X-Frame-Options: SAMEORIGIN
X-Xss-Protection: 1

我有一个登录并获取cookie的函数

代码语言:javascript
运行
复制
const axios = require('axios')
const setCookie = require('set-cookie-parser');

const zeppelinLoginCoockie = async function(){
    return new Promise((resolve, reject) => {
        axios
        .post(process.env.ZEPPELIN_URL + 'login', 'userName=admin&password=admin')
        .then(res => {
            console.log(`statusCode: ${res.status}`);
            //console.log(res);
            let cookies = setCookie.parse(res, {
                decodeValues: true  // default: true
              });
            let lastSessionId = 'null';
            cookies.forEach(element => {
                if ( element.name === 'JSESSIONID' ) {
                    lastSessionId = element.value;
                };
            });
            //console.log(cookies);
            return resolve(lastSessionId);
        })
        .catch(error => {
            console.error(error);
            return reject(error);
        });
    });
}

这是可行的,但现在我不知道如何执行第二个命令来启动笔记。

我尝试提供cookie,如下所示:

代码语言:javascript
运行
复制
const zeppelinNoteRun = async function(loginCookie){
    return new Promise((resolve, reject) => {
        const cookieHeader = `JSESSIONID=${loginCookie}; Path=/; HttpOnly`
        axios
        .post(process.env.ZEPPELIN_URL + 'notebook/job/2G9P1992Z/20210615-091750_1582099873', {
            headers:{
                cookie: cookieHeader
            } 
        })
        .then(res => {
            console.log(`statusCode: ${res.status}`);
            return resolve(res);
        })
        .catch(error => {
            console.error(error);
            return reject(error);
        });
    });
}

我不精通Axios或cookies,所以我有兴趣知道如何执行这样的任务?

编辑:节点中的url有一个拼写错误,尽管公认的答案是最终的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-01 09:04:40

您已经传递了包含cookie的对象作为POST数据。尝试在axios.post的第一个参数后添加null

代码语言:javascript
运行
复制
axios.post(url, null, {
  headers:{
    cookie: cookieHeader
  } 
})

axios.post()签名

代码语言:javascript
运行
复制
axios#post(url[, data[, config]])

axios post method

顺便说一句,在浏览器端覆盖Cookie头文件在设计上是行不通的,不管你是使用原生fetch还是浏览器端axios,请参阅Forbidden header name

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69010536

复制
相关文章

相似问题

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