错误401:未经授权,即使在使用www.openweathermap.org后使用API​​密钥也收到

时间:2016-06-10 17:03:12

标签: javascript api openweathermap

您好我使用javascript来构建我的第一个网络应用程序并使用来自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();
        }

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

对于将来的用户,因为我遇到了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文件变量使用正确的语法,即 NAME = VALUE

API_KEY=djgkv43439d90bkckcs

没有分号,引号等

3)检查请求网址

检查将在其中进行API调用的请求网址,请确保

  • 它没有空格,花括号等
  • 根据URL编码正确
  • 根据API文档进行纠正

4)使用dotenv进行调试:

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

const result = dotenv.config()

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

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

希望它会有所帮助:)

答案 2 :(得分:0)

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

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