Node.js http.get对抗squarespace.com站点的状态代码为403

Node.js http.get对抗squarespace.com站点的状态代码为403,node.js,squarespace,Node.js,Squarespace,当我对一个指向SquareSpace(SS)站点的URL执行一个简单的http.get时,我得到一条403消息。我知道该网站正在运行,服务器可以访问它。下面是一个针对SS站点的简单示例(不是我的,但产生了相同的问题): 显示服务器可以访问站点: 卷曲http://www.letsmoveschools.org 这将返回站点中的所有HTML。。。 节点应用程序 var http = require('http'); var url; url = 'http://www.letsmovesc

当我对一个指向SquareSpace(SS)站点的URL执行一个简单的
http.get
时,我得到一条403消息。我知道该网站正在运行,服务器可以访问它。下面是一个针对SS站点的简单示例(不是我的,但产生了相同的问题):

  • 显示服务器可以访问站点:
    
    卷曲http://www.letsmoveschools.org
    这将返回站点中的所有HTML。。。
    

  • 节点应用程序

    var http = require('http');
    var url;
    
    url = 'http://www.letsmoveschools.org/';
    
    var req = http.get(url, function(res) {
    
      res.on('data', function(chunk) {
       //Handle chunk data
      });
    
      res.on('end', function() {
        // parse xml
        console.log(res.statusCode);
      });
    
      // or you can pipe the data to a parser
      //res.pipe(dest);
    
    });
    
    req.on('error', function(err) {
      // debug error
      console.log('error');
    });
    
当我现在运行node app
node app.js
时,它会输出
403
状态代码


我曾在其他网站上试用过这段代码,效果很好,只是不适合squarespace网站。关于SS上的配置或我需要在Node中执行的其他操作,您有什么想法吗?

问题是远程服务器需要一个
用户代理
头,而Node不会自动发送这样的头。加上这一点,您应该会得到200的回复:

// ...

url = 'http://www.letsmoveschools.org/';

var opts = require('url').parse(url);
opts.headers = {
  'User-Agent': 'javascript'
};

var req = http.get(opts, function(res) {
// ...

问题在于,远程服务器需要一个
用户代理
头,而节点不会自动发送这样的头。加上这一点,您应该会得到200的回复:

// ...

url = 'http://www.letsmoveschools.org/';

var opts = require('url').parse(url);
opts.headers = {
  'User-Agent': 'javascript'
};

var req = http.get(opts, function(res) {
// ...

问题在于,远程服务器需要一个
用户代理
头,而节点不会自动发送这样的头。加上这一点,您应该会得到200的回复:

// ...

url = 'http://www.letsmoveschools.org/';

var opts = require('url').parse(url);
opts.headers = {
  'User-Agent': 'javascript'
};

var req = http.get(opts, function(res) {
// ...

问题在于,远程服务器需要一个
用户代理
头,而节点不会自动发送这样的头。加上这一点,您应该会得到200的回复:

// ...

url = 'http://www.letsmoveschools.org/';

var opts = require('url').parse(url);
opts.headers = {
  'User-Agent': 'javascript'
};

var req = http.get(opts, function(res) {
// ...

响应主体是否有任何内容?也许是关于身份验证或机器人的使用?@mscdex感谢您修复了我的代码。为了将来的参考,您对代码块做了什么使其看起来合适?我尝试了几种方法,但都没能成功。@MartinGiffyD'Souza如果你问我是如何找到解决方案的,我知道cURL默认情况下不会发送很多头,头是两个请求之间唯一的区别。所以我尝试设置cURL一个接一个发送的标题,直到我找到了最基本的标题集(在本例中,只要
User-Agent
就足够了)。响应主体有任何内容吗?也许是关于身份验证或机器人的使用?@mscdex感谢您修复了我的代码。为了将来的参考,您对代码块做了什么使其看起来合适?我尝试了几种方法,但都没能成功。@MartinGiffyD'Souza如果你问我是如何找到解决方案的,我知道cURL默认情况下不会发送很多头,头是两个请求之间唯一的区别。所以我尝试设置cURL一个接一个发送的标题,直到我找到了最基本的标题集(在本例中,只要
User-Agent
就足够了)。响应主体有任何内容吗?也许是关于身份验证或机器人的使用?@mscdex感谢您修复了我的代码。为了将来的参考,您对代码块做了什么使其看起来合适?我尝试了几种方法,但都没能成功。@MartinGiffyD'Souza如果你问我是如何找到解决方案的,我知道cURL默认情况下不会发送很多头,头是两个请求之间唯一的区别。所以我尝试设置cURL一个接一个发送的标题,直到我找到了最基本的标题集(在本例中,只要
User-Agent
就足够了)。响应主体有任何内容吗?也许是关于身份验证或机器人的使用?@mscdex感谢您修复了我的代码。为了将来的参考,您对代码块做了什么使其看起来合适?我尝试了几种方法,但都没能成功。@MartinGiffyD'Souza如果你问我是如何找到解决方案的,我知道cURL默认情况下不会发送很多头,头是两个请求之间唯一的区别。所以我试着设置cURL一个接一个发送的头,直到我找到了工作的最小头集(在本例中,只要
User-Agent
就足够了)。