我正在抓捕一个需要登录的网站。当我只运行一个本地测试功能来测试我的请求时,一切正常。
这是奇怪的部分。当我在客户端上运行脚本时,一切正常,但是在本地主机上的服务器端运行脚本时,成功登录后会出现错误。当我尝试向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);
答案 0 :(得分:1)
在这里我将假定您已经登录到该服务,但是您没有正确地向其发送会话ID。登录并进行请求时,请查看浏览器的“网络”选项卡,查看发送到服务器的内容和接收到的内容。通过模拟用户浏览器与其服务器之间的通信,您将能够登录和爬网。但是,如果他们不想让您这样做,请不要这样做。