Как я могу очистить сайты, которые требуют аутентификации, используя node.js? - PullRequest
18 голосов
/ 04 января 2012

Я встречал множество обучающих программ, объясняющих, как очистить общедоступные веб-сайты, которые не требуют аутентификации / входа в систему , используя node.js.

Может кто-нибудь объяснить, как очистить сайты, требующие входа в систему, с помощью node.js?

Ответы [ 4 ]

25 голосов
/ 04 января 2012

Используйте библиотеку Mikeal's Request , вам необходимо включить поддержку файлов cookie следующим образом:

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

Таким образом, сначала вы должны создать имя пользователя на этом сайте (вручную) и передать имя пользователя и пароль в качестве параметров при выполнении запроса POST к этому сайту. После этого сервер ответит файлом cookie, который запомнит запрос, так что вы сможете получить доступ к страницам, требующим входа на этот сайт.

Примечание: этот подход не работает, если на странице входа в систему используется что-то вроде reCaptcha.

9 голосов
/ 22 июня 2015

Или используя суперагент :

var superagent = require('superagent')
var agent = superagent.agent();

agent - это постоянный браузер , который будет обрабатывать получение и настройку файлов cookie, рефереров и т. Д.agent.get, agent.post() как обычно.

3 голосов
/ 08 января 2019

Я работаю с NodeJs Scrapers уже уже более 2 лет

Я могу вам сказать, что лучший выбор при работе с логинами и аутентификацией - НЕ использовать прямой запрос

Это потому, что вы просто тратите время на создание запросов вручную, а это намного медленнее,

Вместо этого используйте браузер с высоким рычагом, которым вы управляете через API, например Puppeteer или NightmareJs

У меня есть хороший стартер и подробное руководство по Как начать чистку с помощью Puppeteer , я уверен, что это поможет!

1 голос
/ 28 января 2019

Вы можете очистить данные с сайтов, требующих аутентификации , например токен csrf .

Использование куки для каждого запроса, подобного этому:

var j = request.jar(); // this is to set the jar of request for session and cookie persistence

request = request.defaults({ jar: j }); //here we are setting the default cookies of request

Вот небольшой код для дальнейшей разработки:

var express = require('express');
var bodyParser = require('body-parser');
var querystring = require('querystring');
var request = require('request'); //npm request package to send a get and post request to a url
const cheerio = require('cheerio'); //npm package used for scraping content from third party sites
var cookieParser = require('cookie-parser')
var http = require('http');
var app = express();
app.use(cookieParser());

var _csrf; //variable to store the _csrf value to be used later

app.use(bodyParser.json());
var html = '';

var j = request.jar(); // this is to set the jar of request for session and cookie persistence
request = request.defaults({ jar: j }); //here we are setting the default cookies of request


//___________________API CALL TO VERIFY THE GMS NUMBER_______________________
app.get('/check', function(req, response) {

    var schemeId = null;
    if (req.query.schemeId) {
        schemeId = req.query.schemeId;
        console.log(schemeId);

    } else {
        response.send('false');
        response.end();
    }
    getCsrfValue(function(err, res) {
        if (!err) {
            _csrf = res;
            console.log(_csrf);

            request.post({
                headers: {
                    'Authorization': '',
                    'Content-Type': 'application/x-www-form-urlencoded',
                },
                uri: 'https://www.xyz.site',

                body: "schemeId=" + schemeId + "&_csrf=" + _csrf

            }, function(err, res, body) {
                if (err) {
                    console.log(err);
                } else {
                    console.log("body of post: " + res.body);

                    const $ = cheerio.load(body.toString());
                    var txt = $('.schemeCheckResult').text();

                    console.log(txt);
                    if (txt) {
                        response.send('true');
                    } else {

                        response.send('false');
                    }
                    html += body;
                }
            });

        } else {
            response.send(err);
        }

    })


});

//______________FUNCTION TO SCRAPE THE CSRF TOKEN FROM THE SITE____________
function getCsrfValue(callback) {
    request.get({
        headers: {
            'Authorization': '',
            'Content-Type': 'application/x-www-form-urlencoded',
        },
        uri: 'https://www.xyz.site'

    }, function(err, res, body) {
        if (err) {
            return callback(err);
        } else {
            const $ = cheerio.load(body.toString());
            var txt = $('input[name=_csrf]').val();
            _csrf = txt;

            return callback(null, _csrf);
        }
    });

}

module.exports = app;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...