Можно ли вызвать http получает с навыком Алексея? - PullRequest
1 голос
/ 04 мая 2019

Я безуспешно пытался использовать модуль http в моей конечной точке Node.js для простого получения http.

Я следовал различным учебным пособиям, чтобы выполнить get в рамках моих намерений, но он продолжает терпеть неудачу с getaddrinfo ENOTFOUND в журнале cloudwatch.

Похоже, что я правильно готовлю URL, если я просто обрезаю и пропускаю вывод URL-адреса в браузер, я получаю ожидаемый ответ, и просто через http получается порт 80.

Я подозреваю, что, возможно, у лямбды, размещенной в Alexa, нет разрешения, необходимого для удаленных вызовов веб-сервисов, не принадлежащих Amazon, но я точно не знаю.

Кто-нибудь может пролить свет? К вашему сведению, это код в моей лямбде:

var http = require('http');

function httpGet(address, zip, zillowid) {
const pathval = 'www.zillow.com/webservice/GetSearchResults.htm' + `?zws-id=${zillowid}` + `&address=${encodeURIComponent(address)}&citystatezip=${zip}`;
console.log ("pathval =" + pathval);
return new Promise(((resolve, reject) => {
   var options = {
    host: pathval,
    port: 80,
    method: 'GET',
};

const request = http.request(options, (response) => {
  response.setEncoding('utf8');
  console.log("options are" + options);
  let returnData = '';

  response.on('data', (chunk) => {
    returnData += chunk;
  });

  response.on('end', () => {
    resolve(JSON.parse(returnData));
  });

  response.on('error', (error) => {
      console.log("I see there was an error, which is " + error);
    reject(error);
  });
});
request.end();
}));
}

1 Ответ

0 голосов
/ 04 мая 2019

host: pathval - неправильное использование модуля Node.js http . Вам нужно указать имя хоста и путь + строку запроса в виде двух разных опций.

Пример правильного использования:

host: 'example.com',
path: '/webservice/GetSearchResults.htm?zws-id=...',

(Конечно, это могут быть переменные, они не обязательно должны быть литералами, как показано здесь для ясности.)

Ошибка возникает из-за того, что вы рассматриваете весь URL как имя хоста, и поэтому он не существует.

Я подозреваю, что, возможно, у лямбды, размещенной на Alexa, нет разрешения, необходимого для удаленных вызовов веб-сервисов, не принадлежащих Amazon.

Нет ограничений на то, с какими службами вы можете связываться из функции Lambda (кроме фильтров, которые защищают от отправки спам-писем непосредственно на случайные почтовые серверы).

...