【问题标题】:error 401 : unauthorized, received even after using API key while using www.openweathermap.org错误 401:未经授权,即使在使用 www.openweathermap.org 时使用 API 密钥后仍收到
【发布时间】:2016-06-10 17:03:12
【问题描述】:

您好,我正在使用 javascript 构建我的第一个 Web 应用程序,并使用来自 www.openweathermap.org/ 的 API 获取数据 我已经使用了文档中提到的 API 密钥,但它仍然给出了未经授权的错误。调用函数时是否有任何其他原因导致此错误。提前谢谢你。

    var APPID = "my_secret_key";
    var temp;
    var loc;
    var icon;
    var wind;
    var humidity;
    var direction;
    function updateByZip(zip){
      var url = "http://api.openweathermap.org/data/2.5/weather?" + 
                "zip = " + zip +
                "&APPID =" + APPID ;
    sendRequest(url);
     }

    function sendRequest(url){
      var xmlhttp = new XMLHttpRequest();
      xmlhttp.onreadystatechange = function(){
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
         var data = JSON.parse(xmlhttp.responseText) ;
         var weather = {}; 
         weather.wind = data.wind.speed; 
         weather.direction = data.wind.deg;
         weather.loc = data.name;
         weather.temp = data.main.temp;
         weather.icon = data.weather[0].id;
         weather.humidity=data.main.humidity;
         update(weather);
        }
       };
        xmlhttp.open("GET", url, true);
        xmlhttp.send();
        }

【问题讨论】:

  • 将该 URL 放在浏览器中就可以了。 sendRequest 到底做了什么?也许它错误地发送了POST?
  • send request 发送一个接收天气数据的请求。如果你愿意,我可以添加代码。我也用过“GET”
  • 我相信您遇到了 CROS 问题。上次我尝试从 OpenWeatherMap 获取数据时它不起作用。 (我找到了这个fiddle,控制台显示CORS error

标签: javascript api openweathermap


【解决方案1】:

它是 URL 中等号附近的空格。可能是对空间进行 urlencoding 并将您的参数作为 APPID%20 发送,这未被识别为有效。

  var url = "http://api.openweathermap.org/data/2.5/weather?" + 
            "zip=" + zip +
            "&APPID=" + APPID;

【讨论】:

  • 是的,这很好!谢谢 !!虽然我的功能还有一些错误,但会检查它。
【解决方案2】:

对于未来的用户,因为我遇到了 401 错误,但解决方法不同。

错误: API 密钥无效。请参阅http://openweathermap.org/faq#error401 了解更多信息

API 调用响应 401 错误: 在以下情况下会出现 401 错误:

这里有一些步骤可以找到问题。

1) 检查API密钥是否被激活

一些 API 服务在仪表板中提供关键信息,无论其激活、过期等 openWeatherMap 都没有。 验证您的密钥是否正在工作“从浏览器进行 API 调用” api.openweathermap.org/data/2.5/weather?q=peshawar&appid=API_key

将 API_key 替换为您自己的密钥,如果您成功获取数据,则您的密钥已激活,否则请等待几个小时以激活密钥。

2) 检查 .env 中的拼写错误和语法

.env 是用于隐藏服务器端代码中的 API_KEY 等凭据的文件。 确保您的 .env 文件变量使用正确的语法,即 名称=值

API_KEY=djgkv43439d90bkckcs

没有分号、引号等

3) 检查请求 URL

检查将进行 API 调用的请求 url,确保

  • 它没有空格、大括号等
  • 根据 URL 编码正确
  • 根据 API 文档正确

4) 使用 dotenv 进行调试:

要知道您的 dotenv 包是否正确解析 API 密钥,请使用以下代码

const result = dotenv.config()

if (result.error) {
  throw result.error
} 
console.log(result.parsed)

此代码检查是否正在解析 .env 文件变量,如果已解析,它将打印 API_KEY 值,否则将打印解析时发生的错误。

希望对你有所帮助:)

其他建议

5) 检查 .env 文件的位置

在您的目录中查找 .env 文件的位置,将其移动到根目录可能会有所帮助(在 cmets 中建议)

【讨论】:

  • 这是一个很好的答案。我还要补充一点,我昨天遇到了这个问题,这是因为我的 .env 文件不在项目的根文件夹中。因此,如果问题仍然存在并且您已完成上述所有操作,请检查 .env 文件的位置。
【解决方案3】:

对于那些遵循先前答案但仍面临 401 问题的人:现在似乎需要通过 HTTPS 访问 API —— 至少对我来说是这样。一些较旧的指南和教程可能会继续在其代码中使用 http://,因此您必须将其更改为 https://

据我所知,OpenWeather 的官方文档中没有提及这一点,他们的示例中也没有包含协议。

【讨论】:

    猜你喜欢
    • 2020-12-23
    • 1970-01-01
    • 2020-12-17
    • 2015-03-19
    • 2014-04-03
    • 2017-11-13
    • 2013-04-02
    • 2022-08-07
    • 2016-12-22
    相关资源
    最近更新 更多