Javascript 错误401:未经授权,即使在使用www.openweathermap.org时使用API密钥也会收到
您好,我正在使用javascript构建我的第一个web应用程序,并使用API从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
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密钥
- 您有免费订阅,并尝试访问我们的付费服务(例如、、等)。请在您的[个人帐户]()中检查您的电费
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文档进行更正
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文件的位置。