账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    为什么使用axios模拟登录时,登录后的cookies无法使用?
    • 2020-01-01 00:00
    • 10
    27
    0

    axios使用问题

    问题描述

    纯后端运行及 node.js情况下

    在使用axios模拟登录时,登录后的cookies在第二次请求的时候无法带在网络请求中。

    问题代码:

    const axios = require('axios');
    
    const instance = axios.create(
        {
            headers: {
                'Accept-Encoding': 'gzip, deflate',
                'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
                'Connection': 'keep-alive',
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
            },
            withCredentials: true,
            transformRequest: [function (data) {
                // Do whatever you want to transform the data
                let ret = '';
                for (let it in data) {
                    ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';
                }
                return ret;
            }]
        }
    );
    
    
    (
        async () => {
            await instance.post('http://127.0.0.1:5000/wc/CqClassBox/lei',
                {
                    pw: '0005f2d9c91740c4af7114db2346004c'
                }
            ).then(res => {
                // console.log(res)
                // console.log(res.headers['set-cookie']);
                console.log(res.request._header);
                console.log(res.headers);
                console.log(res.data);
                console.log(res.headers['set-cookie'])
            });
            await instance.post('http://127.0.0.1:5000/wc/CqClassBox/loginTest',
                {
                    username: '12346789',
                    password: '12346789'
                }
            ).then(res => {
                console.log(res.request._header);
                console.log(res.headers);
                console.log(res.data);
                console.error("-----------");
                // console.log(res)
                console.log(res.headers['set-cookie'])
                console.log(instance.defaults.withCredentials)
    
            });
        }
    )();

    预期结果

    预期在第二次的axios的post请求,headers中带上第一次请求获得的cookies。但第二次请求中没有携带第一次请求后的cookies,不知道问题出现在哪里。

    运行结果

    PS D:\Github\My-Snippets\Spider\Js_Spider> node .\test.js
    POST /wc/CqClassBox/lei HTTP/1.1
    Accept: application/json, text/plain, */*
    Content-Type: application/x-www-form-urlencoded
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
    Connection: keep-alive
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
    Content-Length: 36
    Host: 127.0.0.1:5000
    
    
    { 'content-type': 'text/html; charset=utf-8',
      'content-length': '10',
      vary: 'Cookie',
      'set-cookie':
       [ 'session=eyJwdyI6IjAwMDVmMmQ5YzkxNzQwYzRhZjcxMTRkYjIzNDYwMDRjIn0.XQT6Tg.5xt9bhpmhrioL2YjigEndHvsWhE; HttpOnly; Path=/' ],
      server: 'Werkzeug/0.14.1 Python/3.7.3',
      date: 'Sat, 15 Jun 2019 14:01:50 GMT' }
    welcom lei
    [ 'session=eyJwdyI6IjAwMDVmMmQ5YzkxNzQwYzRhZjcxMTRkYjIzNDYwMDRjIn0.XQT6Tg.5xt9bhpmhrioL2YjigEndHvsWhE; HttpOnly; Path=/' ]
    POST /wc/CqClassBox/loginTest HTTP/1.1
    Accept: application/json, text/plain, */*
    Content-Type: application/x-www-form-urlencoded
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
    Connection: keep-alive
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
    Content-Length: 36
    Host: 127.0.0.1:5000
    
    
    { 'content-type': 'application/json',
      'content-length': '55',
      server: 'Werkzeug/0.14.1 Python/3.7.3',
      date: 'Sat, 15 Jun 2019 14:01:50 GMT' }
    { errorMessage: 'no pw session', messageStatus: false }
    -----------
    undefined
    true

    疑问

    是不是axios的cookies只能从浏览器中获取?

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 咫侑厄想迩 普通会员 1楼

      使用axios模拟登录时,如果登录后的cookies无法使用,可能有以下几个原因:

      1. cookies的设置问题:请确保在axios模拟登录后,您已经设置了cookies。如果没有设置,需要在模拟登录后的请求中设置cookies。在axios模拟登录后,返回的response对象中有一个cookies属性,您可以使用这个属性来设置cookies。

      javascript axios.post('/login', { username: 'username', password: 'password' }) .then(response => { // 使用response.cookies设置cookies console.log(response.cookies); }) .catch(error => { // 处理错误 });

      1. cookies的名称问题:在axios模拟登录后,返回的response对象中有一个cookies属性,这个属性的名称是'cookie_name'。请确保在设置cookies时,将'cookie_name'替换为实际的cookies名称。

      javascript axios.post('/login', { username: 'username', password: 'password' }) .then(response => { // 使用response.cookies设置cookies console.log(response.cookies); }) .catch(error => { // 处理错误 });

      1. cookies的值问题:在axios模拟登录后,返回的response对象中有一个cookies属性,这个属性的值是'cookie_value'。请确保在设置cookies时,将'cookie_value'替换为实际的cookies值。

      javascript axios.post('/login', { username: 'username', password: 'password' }) .then(response => { // 使用response.cookies设置cookies console.log(response.cookies); }) .catch(error => { // 处理错误 });

      1. cookies的过期问题:请确保在axios模拟登录后,返回的response对象中有一个cookies属性,这个属性的过期时间是'cookie_expiration_time'。请确保在设置cookies时,将'cookie_expiration_time'替换为实际的cookies过期时间。

      javascript axios.post('/login', { username: 'username', password: 'password' }) .then(response => { // 使用response_cookies设置cookies console.log(response.cookies); }) .catch(error => { // 处理错误 });

      1. cookies的加密问题:请确保在axios模拟登录后,返回的response对象中有一个cookies属性,这个属性的加密方法是'cookie_encryption_method'。请确保在设置cookies时,将'cookie_encryption_method'替换为实际的cookies加密方法。

      javascript axios.post('/login', { username: 'username', password: 'password' }) .then(response => { // 使用response_cookies设置cookies console.log(response.cookies); }) .catch(error => { // 处理错误 });

      以上是使用axios模拟登录时,登录后的cookies无法使用的一些常见原因。请根据实际情况进行排查。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部