Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 错误401:未经授权,即使在使用www.openweathermap.org时使用API密钥也会收到_Javascript_Api_Openweathermap - Fatal编程技术网

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

Javascript 错误401:未经授权,即使在使用www.openweathermap.org时使用API密钥也会收到,javascript,api,openweathermap,Javascript,Api,Openweathermap,您好,我正在使用javascript构建我的第一个web应用程序,并使用API从www.openweathermap.org/ 我使用了文档中提到的API密钥,但它仍然给出了未经授权的错误。调用函数时,是否还有其他原因导致此错误。先谢谢你 var APPID = "my_secret_key"; var temp; var loc; var icon; var wind; var humidity; var direction; f

您好,我正在使用javascript构建我的第一个web应用程序,并使用API从www.openweathermap.org/ 我使用了文档中提到的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中靠近等号的空格。很可能是对空格进行URL编码,并将您的参数作为未被识别为有效的
APPID%20
发送

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

对于未来的用户,因为我有401错误,但解决它的方式不同

错误: 无效的API密钥。请参阅以了解更多信息

API调用响应401错误: 在以下情况下,您可以获得错误401:

  • 您没有在API请求中指定
  • 您的API密钥尚未激活。在接下来的几个小时内,它将被激活并准备好使用
  • 您在API请求中使用了错误的API密钥。请检查您的正确API密钥
  • 您有免费订阅,并尝试访问我们的付费服务(例如、、等)。请在您的[个人帐户]()中检查您的电费
以下是查找问题的一些步骤

1) 检查API密钥是否已激活 一些API服务在仪表板中提供关键信息,无论其是否已激活、是否已过期等。openWeatherMap不提供这些信息。 验证密钥是否有效的步骤“从浏览器调用API”
api.openweathermap.org/data/2.5/weather?q=peshawar&appid=api\u key

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

2) 检查.env的拼写和语法 .env是用于在服务器端代码中隐藏凭据(如API_密钥)的文件。 确保.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_键值,否则将打印解析时发生的错误

希望能有所帮助:)

其他建议 5) 检查.env文件的位置
查找目录中.env文件的位置,将其移动到根目录可能会有帮助(在评论中建议)

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


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

将该URL放在浏览器中就可以了。
sendRequest
具体做什么?可能是它错误地发送了POST?发送请求发送了接收天气数据的请求。如果你愿意,我可以添加代码。我还使用了“GET”,我相信你有CRO问题。上次我试图从OpenWeatherMap获取数据时,它没有工作。(我发现了这个问题,控制台显示了一个。是的,这很好!!谢谢!!虽然我的函数中仍然有一些错误,但我会检查它。这是一个很好的答案。我还要补充一点,我昨天遇到了这个问题,这是因为我的.env文件不在我的项目的根文件夹中。因此,如果问题仍然存在,并且你已经完成了所有的操作,我将继续使用它。)对于以上内容,请检查.env文件的位置。