首页 > 解决方案 > NodeJS GET 请求在本地机器上工作,但不在远程 VM 内

问题描述

我正在尝试创建一个简单的工具,它将访问特定的 Facebook 页面并提取一些数据。我正在为此使用 NodeJS。我在 GET 请求中使用内置的 https 模块。我本地机器上的东西工作正常,但在虚拟机内部却无法得到响应,每次都失败。

我也尝试使用 axios,但它也不起作用。

以前我认为这可能是防火墙问题,但我启用了防火墙内的所有东西,但它也无法正常工作。我面临这个非常奇怪的问题。

这可能是什么原因?

是 Facebook 阻止了我的请求吗?没有权利?我也在发送 User-Agent 标头,但它不起作用。

我的代码如下所示:

const options = {
  hostname: 'www.facebook.com',
  // port: 443,
  path: `/${username}`,
  method: 'GET',
  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',
    'Accept-Language': 'en-GB,en-US;q=0.8,en;q=0.6',
  },
};
const request = https.request(options, (response) => {
  let body = '';
  console.log('response : \n' + response);
  response.setEncoding('utf8');

  response.on('data', (chunk) => {
    body += chunk;
    console.log('response on data chunk : \n' + chunk);
  });
  response.on('end', () => {
    console.log('body : \n' + body);
    const arrMatches = body.match(rePattern);
    if (arrMatches && arrMatches.length > 1) {
      resolve(arrMatches[1]);
    } else {
      reject(new Error('Facebook user not found'));
    }
  });
});

request.on('error', (err) => {
  console.log('request error : \n' + err);
  reject(err);
});

request.end();

标签: node.jsfacebook-graph-apiweb-scraping

解决方案


推荐阅读