使用POST请求从Nodejs服务器登录网站

时间:2019-12-27 06:48:51

标签: node.js post web-scraping

我正在尝试从我的Nodejs服务器登录网站,以便可以进行一些网络搜集以收集用户数据,但是在发送登录所需的POST请求时遇到了麻烦。在网站上,它使用一种形式来接收用户的用户名和密码,但是我不知道如何发送完美模仿表单的POST请求。

我一直在尝试使用请求发送表格 之所以有第一个请求,是因为表单需要验证ID,然后我从字符串中解析出ID,以便可以将其发送回表单。

无论何时发送,它都会给我一个HTTP错误400和一个空白页面,看起来像这样 HTTP错误:400 访问/ pf4 / cms2_site / view_deployment时出现问题。原因:NoEvent

这是我用来从Nodejs服务器发送请求的代码。

        request.get('https://cdm.schoolloop.com/portal/login',{headers: { 'User-Agent': 'Mozilla/5.0' }}, function(err, res, body){

            body = body.substring(body.indexOf('id="form_data_id" value="') + ('id="form_data_id" value="').length, body.length);
            var formDataId = body.substring(0, body.indexOf('"'));
            request.post({
                uri: 'https://cdm.schoolloop.com',
                host: 'https://cdm.schoolloop.com',
                path: '/portal/login?etarget=login_form',
                method: 'POST',
                headers: { 'User-Agent': 'Mozilla/5.0', 'Content-Type': 'application/x-www-form-urlencoded' },
                form: {
                    'login_name': "testUsername",
                    'password': "testPassword",
                    'event.login.x': 0,
                    'event.login.y': 0,
                    'redirect': 'pig4d2db88ad6',
                    'forward': '',
                    'login_form_reverse': '',
                    'form_data_id': formDataId,
                    'sort': '',
                    'reverse': '',
                    'login_form_sort': '',
                    'event_override': 'login',
                    'login_form_filter': '',
                    'login_form_letter': '',
                    'return_url': '',
                    'login_form_page_index': '',
                    'login_form_page_item_count': ''
                }
            }, function (err, firstResponse, body) {
                if (err) {
                    console.log(err);
                } else if (body) {
                    console.log(body);
                }
            });

        });

如果有人可以告诉我我在POST请求中做错了什么,或者我怎么知道,我将不胜感激。
预先谢谢你!

1 个答案:

答案 0 :(得分:1)

您获得对“ https://cdm.schoolloop.com”的POST的标准响应

“请求”库通过uri标识资源,这应该是发布请求的正确语法:

request.post({
        uri: 'https://cdm.schoolloop.com/portal/login?etarget=login_form',
        method: 'POST',
        headers: { 'User-Agent': 'Mozilla/5.0', 'Content-Type': 'application/x-www-form-urlencoded' },
        form: {
            'login_name': "testUsername",
            'password': "testPassword",
            'event.login.x': 0,
            'event.login.y': 0,
            'redirect': 'pig4d2db88ad6',
            'forward': '',
            'login_form_reverse': '',
            'form_data_id': formDataId,
            'sort': '',
            'reverse': '',
            'login_form_sort': '',
            'event_override': 'login',
            'login_form_filter': '',
            'login_form_letter': '',
            'return_url': '',
            'login_form_page_index': '',
            'login_form_page_item_count': ''
        }
    }, function ...