(未经授权)从本地主机请求时-当“节点testRequest.js”

时间:2018-08-19 17:57:14

标签: javascript node.js authentication request

我正在抓捕一个需要登录的网站。当我只运行一个本地测试功能来测试我的请求时,一切正常。

这是奇怪的部分。当我在客户端上运行脚本时,一切正常,但是在本地主机上的服务器端运行脚本时,成功登录后会出现错误。当我尝试向GET请求时,会出现此错误。目标网站api。我得到的错误是: 401(未经授权)错误。 res消息为: {消息:“此请求的授权已被拒绝。”}

我认为我要抓取的网站阻止了其他网站发出的外部api请求,这解释了当我在本地主机的服务器端运行脚本时出现的错误。

让我们假设是这种情况。 我应该如何避免服务器从corssorigin阻止我的请求?


我在客户端运行它:https://gyazo.com/ec8fb27ef9a679413eed04f5c4acf475

我在服务器端运行它:https://gyazo.com/43096da6c5f381c0faa39ced92a0108c


请注意:在客户端上运行脚本时,一切正常,我没有任何错误,一切都按预期进行。

但是,当我从应用程序的服务器端运行完全相同的脚本时,事情开始变得怪异。我能够以某种方式成功登录,但是此后,我对其api的所有GET请求都导致401未经授权的错误。


script.js-随时使用我的用户名和密码登录。 (缩进量有点小。)

    const Async = require('simplify-async').simpleAsync;
    var request = require('request');
    var request = request.defaults({jar: true, headers: {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"}});

    const formData = {
        username: 'zinuku.public@gmail.com',
        password: 'Ryan1234',
        grant_type: 'password'
    };

    const options = {
        url: 'https://www.eovendo.com/token',
        form: formData,
        referer: 'https://www.eovendo.com/',
    };


    const callback = (err, res, body) => {
        if (err) {console.log(err, 'FAILED'); return}

        const info = JSON.parse(body);
        console.log(info);
        console.log('Succesfully logged in');


        const getBalance = () => {
            console.log('WE AR ENOW IN GET BALANCE');
            const promise = new Async();

            request.get({url: 'https://www.eovendo.com/api/Balance/GetBalance'}, (err, res, body) => {
                if (err) promise.reject(err);
                const balance = JSON.parse(body);
                console.log('>>>', balance);
                promise.resolve(balance)
            });
            return promise.promise;
        };

        getBalance()
                .catch(err => console.log(err))
                .then(res => {
                    console.log('balance func response, msg:', res)
                });
    };

    const eo_login = (options) => {
        request.post(options, callback);
    };

    eo_login(options);

1 个答案:

答案 0 :(得分:1)

在这里我将假定您已经登录到该服务,但是您没有正确地向其发送会话ID。登录并进行请求时,请查看浏览器的“网络”选项卡,查看发送到服务器的内容和接收到的内容。通过模拟用户浏览器与其服务器之间的通信,您将能够登录和爬网。但是,如果他们不想让您这样做,请不要这样做。