Nodejs模拟登陆人人遇到问题,求大大们解答

Nodejs模拟登陆人人遇到问题,求大大们解答

个人觉得好像是cookie没有保存,怎么办? <pre> var request = require(‘request’); var fs = require(‘fs’);

var request = request.defaults({jar: true});

request.post(‘http://www.renren.com/ajaxLogin/login’,{form:{email:'’,password:’}},function (error,response,body){ console.log(body);

request.get({url:'http://www.renren.com/Home.do'},function (error,response,body){
    fs.writeFileSync('body.txt', body);

})

});

</pre>

在第二个request.get()方法并没有取得想要的主页内容,Home.do判断你没有登陆。。


8 回复

Node.js 模拟登录人人网遇到问题

大家好,我最近在尝试使用 Node.js 来模拟登录人人网(Renren),但是在执行过程中遇到了一些问题。我怀疑是 cookie 没有正确保存导致的,希望各位大佬能帮忙解答一下。

代码示例

首先,我使用了 requestfs 这两个库来发送 HTTP 请求并保存响应内容。以下是部分代码:

var request = require('request');
var fs = require('fs');

// 使用 jar 选项自动处理 cookies
var request = request.defaults({ jar: true });

// 发送 POST 请求进行登录
request.post({
    url: 'http://www.renren.com/PLogin.do',
    form: {
        email: 'your-email@example.com',
        password: 'your-password'
    }
}, function(error, response, body) {
    console.log(body);

    // 发送 GET 请求获取首页内容
    request.get({
        url: 'http://www.renren.com/Home.do'
    }, function(error, response, body) {
        fs.writeFileSync('body.txt', body);
        console.log('Homepage content saved to body.txt');
    });
});

问题分析

在这个代码片段中,我通过 request.defaults({ jar: true }) 来启用自动管理 cookie 的功能。但是,从实际运行结果来看,第二次请求时并没有获得预期的登录后页面内容,而是返回了一个未登录的状态。

解决方案

根据我的经验,有几个可能的原因导致这个问题:

  1. URL 错误:请确保你发送 POST 请求的 URL 是正确的。人人网的登录 URL 可能与示例中的不同。
  2. 表单数据错误:检查 emailpassword 是否正确,并且符合人人网登录表单的要求。
  3. Cookie 管理:确保 request.defaults({ jar: true }) 正确配置并且被所有请求使用。

示例改进

你可以尝试以下改进后的代码:

var request = require('request');
var fs = require('fs');

// 启用自动处理 cookies
var request = request.defaults({ jar: true });

// 发送 POST 请求进行登录
request.post({
    url: 'http://www.renren.com/PLogin.do',
    form: {
        email: 'your-email@example.com',
        password: 'your-password'
    }
}, function(error, response, body) {
    if (!error && response.statusCode == 200) {
        // 登录成功后发送 GET 请求获取首页内容
        request.get({
            url: 'http://www.renren.com/Home.do'
        }, function(error, response, body) {
            fs.writeFileSync('body.txt', body);
            console.log('Homepage content saved to body.txt');
        });
    } else {
        console.error('Login failed:', body);
    }
});

希望以上信息对你有所帮助!如果还有其他问题,请随时提问。


根据官方文档来说,request.defaults({jar: true}); 这一句已经开启了全局 cookiejar 了。

所以我怀疑两点:

  1. 第一次 post 登陆没有成功

  2. 试着把第二次放在 setImmediate 里面试试,说不定有奇效。

第一点,当你修改post里面的账号不对的时候,返回的是“用户名和密码不匹配”所以post应该是成功了的。放进去还是没有效果啊。本人刚接触node不久

http请求是即时关闭的连接, 不是长连接.

也就是你的账号密码在get的时候还要发送

或者你有取得目标网站发送的cookie来跟踪账户

已经解决

根据你的描述,问题可能是由于Cookie没有正确保存或传递导致的。为了确保Cookie能够被正确地保存和使用,你可以尝试使用request-promise库来处理Promise,并确保在整个会话中Cookie都能被正确传递。

以下是改进后的示例代码:

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

async function loginAndFetchHomePage() {
    const loginUrl = 'https://www.renren.com/ajaxLogin/login';
    const homePageUrl = 'http://www.renren.com/Home.do';

    try {
        // 登录请求
        const loginResponse = await request({
            method: 'POST',
            url: loginUrl,
            form: {
                email: 'your-email@example.com',
                password: 'your-password'
            },
            jar: true, // 启用cookie管理
            resolveWithFullResponse: true
        });

        console.log('登录响应:', loginResponse.body);

        // 获取主页内容
        const homePageResponse = await request({
            url: homePageUrl,
            jar: true // 确保使用同一个jar对象以保持cookie
        });

        console.log('主页内容:', homePageResponse);

        // 将主页内容写入文件
        fs.writeFileSync('homePageContent.txt', homePageResponse);

    } catch (error) {
        console.error('错误:', error);
    }
}

loginAndFetchHomePage();

解释:

  1. 启用Cookie管理:在request选项中添加jar: true来启用Cookie管理。
  2. 异步处理:使用request-promise库使请求返回Promise,便于使用async/await语法进行异步操作。
  3. 使用同一个Jar对象:确保两次请求(登录和获取主页)使用的是同一个Cookie容器,这样可以保证会话的一致性。
  4. 错误处理:添加了错误处理逻辑,以便于调试。

确保将your-email@example.comyour-password替换为实际的用户名和密码。此外,如果目标网站的结构发生变化,请相应调整URL和表单数据。

回到顶部