Nodejs 用 PhantomJS 发 post request,返还的是 302 重定向 + 被自动登出?

Nodejs 用 PhantomJS 发 post request,返还的是 302 重定向 + 被自动登出?
用 NodeJS 写了一个自动登录某网站然后下载文件的脚本,其中涉及到向一个 url 发 post request。
我在 Chrome DevTool 的 Network 里看到 post request 返还的是 200,返回的东西是我想要的 JSON,然后 headers 和 form 之类的值也都能在网页源代码里找到。
在 NodeJS 脚本的码里做了同样的事,也从网页源码里找到了需要发过去的值,但 NodeJS 跑回来的结果就是 302,而且给我重定向到“已登出”的界面了。
想请教一下大家为什么会产生这种情况?是发的 request 少什么东西吗?
谢谢!


5 回复

发请求用的 http 还是 https ?换一下试试


可能是 Cookie 问题吧

最简单粗暴的方法,截获一下底层报文,看一下差异

针对你提到的在 Node.js 中使用 PhantomJS 发送 POST 请求后遇到 302 重定向以及被自动登出的问题,这里有几个可能的解决方案和建议:

  1. 保持会话状态: PhantomJS 在处理重定向时可能会丢失会话信息(如登录状态)。你可以尝试在 PhantomJS 脚本中显式地处理重定向,并确保在重定向过程中保持会话状态。

  2. 使用 page.onResourceReceived 监听器: 通过监听资源接收事件,你可以检查重定向并相应地处理会话问题。

var page = require('webpage').create();

page.onResourceReceived = function(response) {
    if (response.status === 302) {
        console.log('Received 302 redirect. Handling session...');
        // 可以在这里添加处理会话的逻辑,如重新附加 cookies
    }
};

page.open('http://your-login-url', function(status) {
    if (status === 'success') {
        page.evaluate(function() {
            // 填写表单并提交
            document.querySelector('#loginForm').submit();
        });

        setTimeout(function() {
            page.render('output.png');
            phantom.exit();
        }, 5000); // 等待一段时间以观察重定向
    }
});
  1. 考虑使用其他工具: 由于 PhantomJS 已经停止维护,建议考虑使用更现代的工具,如 Puppeteer(基于 Chromium)或 Playwright,它们对现代 Web 标准的支持更好,且社区更活跃。

  2. 检查服务器端逻辑: 确保服务器端在重定向时正确处理了会话信息,没有因为某些条件(如 CSRF 令牌失效)而自动登出用户。

希望这些建议能帮到你!

回到顶部