(未经授权)从本地主机请求时 - "node testRequest.js"时没有错误



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

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

我认为我尝试抓取的网站正在阻止来自其他网站的外部 api 请求,这解释了我在本地主机的服务器端运行脚本时的错误。

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


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

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


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

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


脚本.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);

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

最新更新