Node.js http.get 针对 squarespace.com 站点的状态代码为 403
Node.js http.get against squarespace.com site has status code 403
当我为转到 SquareSpace (SS) 站点的 URL 执行简单的 http.get
时,我收到了 403 消息。我知道该站点正在运行并且服务器可以访问它。这是一个针对 SS 站点的简单示例(不是我的,但会产生相同的问题):
显示服务器可以访问站点:
curl http://www.letsmoveschools.org
This returns all the HTML from the site...
节点应用
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.js
它输出 403
状态代码。
我已经在其他网站上尝试过此代码并且它工作正常,只是不适用于 squarespace 网站。对 SS 上的配置或我需要在 Node 中做的其他事情有任何想法吗?
问题是远程服务器是 expecting/requiring User-Agent
header 并且节点不会自动发送这样的 header。添加那个,你应该得到一个 200 响应:
// ...
url = 'http://www.letsmoveschools.org/';
var opts = require('url').parse(url);
opts.headers = {
'User-Agent': 'javascript'
};
var req = http.get(opts, function(res) {
// ...
当我为转到 SquareSpace (SS) 站点的 URL 执行简单的 http.get
时,我收到了 403 消息。我知道该站点正在运行并且服务器可以访问它。这是一个针对 SS 站点的简单示例(不是我的,但会产生相同的问题):
显示服务器可以访问站点:
curl http://www.letsmoveschools.org This returns all the HTML from the site...
节点应用
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.js
它输出 403
状态代码。
我已经在其他网站上尝试过此代码并且它工作正常,只是不适用于 squarespace 网站。对 SS 上的配置或我需要在 Node 中做的其他事情有任何想法吗?
问题是远程服务器是 expecting/requiring User-Agent
header 并且节点不会自动发送这样的 header。添加那个,你应该得到一个 200 响应:
// ...
url = 'http://www.letsmoveschools.org/';
var opts = require('url').parse(url);
opts.headers = {
'User-Agent': 'javascript'
};
var req = http.get(opts, function(res) {
// ...