首页 > 解决方案 > Nodejs 相当于向服务器发送一个 GET 请求以从 API 获取数据

问题描述

这是我试图从中获取数据的 API 端点https://geocode.xyz/?locate=Warsaw,Poland&json=1

当我在浏览器或 Postman 中运行它时,我得到了成功的响应。这是预期的输出片段。

{“标准”:{“地址”:{},“城市”:“华沙”,
“省”:“PL”,“国家名称”:“波兰”,“邮政”:{},
“信心”:“0.7 “ },“longt”:“21.03539”,“alt”:{
“loc”:{“longt”:“21.23400”,“prov”:“PL”,
“city”:“华沙”,“countryname”:“波兰”,“邮政”:“05-077”,“地区”:{},“latt”:“52.21890”}},“海拔”:{},“latt”:“52.23275”}

我正在尝试使用 nodejs 获得相同的输出。我尝试了默认的 https 和请求模块,但无济于事。这就是我所拥有的:

const request = require('request');

request('https://geocode.xyz/?locate=Warsaw,Poland&json=1', { json: true }, (err, res, body) => {
  if (err) { return console.log(err); }
    console.log(body);
});

这是我看到的输出:

{成功:错误,错误:{代码:'006',消息:'请求限制。' } }

免费版的 API 预计每秒只有 1 个请求。

受限制的 API 访问是免费的。速率限制:每秒最多 1 个 API 调用。API(对于所有空闲端口用户的组合,每秒限制为不超过 1 个请求。例如,如果同时出现 2 个空闲请求,则每个请求被限制为 2 秒)。

如何限制我的代码只发送一个请求?使用浏览器/邮递员时如何获得响应。如何使用 nodejs 实现相同的预期成功响应?

这也是我尝试使用 https 的方法,我得到了相同的响应:

const https = require('https');

https.get('https://geocode.xyz/?locate=Warsaw,Poland&json=1', (resp) => {
  let data = '';

  // A chunk of data has been recieved.
  resp.on('data', (chunk) => {
    data += chunk;
  });

  // The whole response has been received. Print out the result.
  resp.on('end', () => {
    console.log(JSON.parse(data));
  });

}).on("error", (err) => {
  console.log("Error: " + err.message);
});

标签: javascriptnode.js

解决方案


来自Geocode.xyz 文档

(...) 对于所有未经身份验证的用户,每秒请求不超过 1 个

您必须创建一个帐户,获取一个 API 密钥并使用它。你的问题应该得到解决。

您有 10 个请求/秒的免费计划。


推荐阅读