Node.js прокси для ws.audioscrobbler.com отвечает с 301 на www.last.fm

#api #redirect #node.js #proxy #last.fm

#API #перенаправление #node.js #прокси #last.fm

Вопрос:

Я пытаюсь использовать Node.js чтобы настроить прокси для Last.fm веб-сервисы. Проблема в том, что каждый запрос к ws.audioscrobbler.com переписывается на www.last.fm . Так, например, $ curl http://localhost:8000/_api/test123 отправляет 301 Moved Permanently на http://www.last.fm/test123 .

 var express = require('express'),
    httpProxy = require('http-proxy');

// proxy server
var lastfmProxy = httpProxy.createServer(80, 'ws.audioscrobbler.com');

// target server
var app = express.createServer();
app.configure(function() {
  app.use('/_api', lastfmProxy);
});
app.listen(8000);
  

В то же время $ curl http://ws.audioscrobbler.com/test123 возвращает обычный 404 Not Found . Я не совсем уверен, чего мне здесь не хватает, или я подхожу к этому совершенно неправильно.

Ответ №1:

Причина, по которой вы получаете 301 Moved Permanently , заключается в том, что ws.audioscrobbler.com получает HTTP-запрос с именем хоста «localhost».

Одно из решений — позволить прокси переписать имя хоста на «ws.audioscrobbler.com » перед передачей его на удаленный сервер:

 var httpProxy = require('http-proxy');

var lastfmProxy = httpProxy.createServer(function (req, res, proxy) {
  req.headers.host = 'ws.audioscrobbler.com';
  proxy.proxyRequest(req, res, {
    host: 'ws.audioscrobbler.com',
    port: 80,
  });
}).listen(8000);