可以使用 Alexa 托管技能调用 http gets 吗?

Possible to call http gets with Alexa hosted skill?

我一直在尝试在我的 Node.js 端点中使用 http 模块来执行简单的 http 获取,但没有成功。

我已经按照各种教程按照我的意图执行了 get,但是它一直失败,在 cloudwatch 日志中显示 getaddrinfo ENOTFOUND。

看来我正在正确准备 url,如果我只是将 url 输出剪切并传递到浏览器中,我会得到预期的响应,它只是一个普通的 http get over 端口80.

我怀疑 Alexa 托管的 lambda 可能没有远程调用非亚马逊网络服务所需的权限,但我不确定这一点。

任何人都可以阐明吗?仅供参考,这是我的 lambda 中的代码:

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();
}));
}

host: pathval 是 Node.js http module 的错误用法。您需要提供主机名和路径 + 查询字符串作为两个不同的选项。

正确用法示例:

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

(当然,这些可以是变量,为了清楚起见,它们不需要像这里显示的那样是文字。)

发生错误是因为您将整个 URL 视为主机名,因此它不存在。

I suspect that maybe the Alexa hosted lambda doesn't have permission necessary to make remote calls to non-amazon web services

对于您可以从 Lambda 函数中联系哪些服务没有限制(除了防止将垃圾邮件直接发送到随机邮件服务器的过滤器)。