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 少什么东西吗?
谢谢!
发请求用的 http 还是 https ?换一下试试
cookie?
最简单粗暴的方法,截获一下底层报文,看一下差异
针对你提到的在 Node.js 中使用 PhantomJS 发送 POST 请求后遇到 302 重定向以及被自动登出的问题,这里有几个可能的解决方案和建议:
-
保持会话状态: PhantomJS 在处理重定向时可能会丢失会话信息(如登录状态)。你可以尝试在 PhantomJS 脚本中显式地处理重定向,并确保在重定向过程中保持会话状态。
-
使用
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); // 等待一段时间以观察重定向
}
});
-
考虑使用其他工具: 由于 PhantomJS 已经停止维护,建议考虑使用更现代的工具,如 Puppeteer(基于 Chromium)或 Playwright,它们对现代 Web 标准的支持更好,且社区更活跃。
-
检查服务器端逻辑: 确保服务器端在重定向时正确处理了会话信息,没有因为某些条件(如 CSRF 令牌失效)而自动登出用户。
希望这些建议能帮到你!