javascript - 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);
});
解决方案
(...) 对于所有未经身份验证的用户,每秒请求不超过 1 个
您必须创建一个帐户,获取一个 API 密钥并使用它。你的问题应该得到解决。
您有 10 个请求/秒的免费计划。
推荐阅读
- python - 重新运行单元格时,Spyder 不会释放内存
- javascript - 如何在没有用户交互的情况下下载和播放音频剪辑?
- css - 用于颜色级别的 Bootstrap 5 映射
- python - 在 Flask 中使用 jsonify 时遇到问题
- sql - SQL 选择快,更新慢
- javascript - Javascript测验分数保存到下一页
- android-studio - android studio更新后预览面板提供程序(JavaFX WebView)错误
- amazon-web-services - AWS CDK - 多个堆栈 - 找不到 Lambda 代码位置的参数
- bash - 如何在 bash 提示符中查看我的实际目录?
- java - Tomcat 重新启动后,会话 JDBCStore 无法 java.lang.Class.forName NullPointerException - 但仅持续一分钟左右,然后工作