错误 401:未经授权,即使在使用 www.openweathermap.org 时使用 API 密钥后仍收到
error 401 : unauthorized, received even after using API key while using www.openweathermap.org
您好,我正在使用 javascript 构建我的第一个网络应用程序,并使用 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 中等号附近的 space。很可能对 space 进行了 urlencoding 并将您的参数作为 APPID%20
发送,这未被识别为有效。
var url = "http://api.openweathermap.org/data/2.5/weather?" +
"zip=" + zip +
"&APPID=" + APPID;
对于未来的用户,因为我遇到了 401 错误但解决方法不同。
错误:
无效的 API 密钥。请参阅 http://openweathermap.org/faq#error401 了解更多信息
API 调用响应 401 错误:
在以下情况下,您可能会收到错误 401:
- 您没有在 API 请求中指定您的 API key。
- 您的 API 密钥尚未激活。在接下来的几个小时内,它将被激活并可以使用。
- 您在 API 请求中使用了错误的 API 密钥。请检查您在 personal account.
中的右 API 键
- 您有 免费 订阅并尝试访问我们的付费服务(例如,16 days/daily forecast API, any historical weather data, Weather maps 2.0, etc). Please, check your tariff in your [personal account]([price and condition])。
以下是查找问题的一些步骤。
1) 检查API键是否被激活
一些 API 服务在仪表板中提供关键信息,无论其是否激活、过期等。openWeatherMap 不提供。
验证您的密钥是否有效 'MAKE API CALL FROM BROWSER'
api.openweathermap.org/data/2.5/weather?q=peshawar&appid=API_key
将API_key换成你自己的key,如果你获取数据成功,那么你的key就激活了,否则要等几个小时才能激活。
2) 检查 .env 中的拼写错误和语法
.env 是用于在服务器端代码中隐藏凭证(例如 API_KEY)的文件。
确保您的 .env 文件变量使用正确的语法,即
名称=值
API_KEY=djgkv43439d90bkckcs
没有分号、引号等
3) 检查请求 URL
检查请求 url 将进行 API 调用的位置,确保
- 它没有空格、大括号等
- 根据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 文件的位置,将其移动到根目录可能会有所帮助(在评论中建议)
对于那些按照前面的答案仍然面临 401 问题的人:现在似乎需要通过 HTTPS 访问 API --- 至少对我来说是这样。一些较旧的指南和教程可能会继续在其代码中使用 http://
,因此您必须将其更改为 https://
。
据我所知,OpenWeather 的官方文档中没有提到这一点,他们的示例中也没有包含该协议。
您好,我正在使用 javascript 构建我的第一个网络应用程序,并使用 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 中等号附近的 space。很可能对 space 进行了 urlencoding 并将您的参数作为 APPID%20
发送,这未被识别为有效。
var url = "http://api.openweathermap.org/data/2.5/weather?" +
"zip=" + zip +
"&APPID=" + APPID;
对于未来的用户,因为我遇到了 401 错误但解决方法不同。
错误: 无效的 API 密钥。请参阅 http://openweathermap.org/faq#error401 了解更多信息
API 调用响应 401 错误: 在以下情况下,您可能会收到错误 401:
- 您没有在 API 请求中指定您的 API key。
- 您的 API 密钥尚未激活。在接下来的几个小时内,它将被激活并可以使用。
- 您在 API 请求中使用了错误的 API 密钥。请检查您在 personal account. 中的右 API 键
- 您有 免费 订阅并尝试访问我们的付费服务(例如,16 days/daily forecast API, any historical weather data, Weather maps 2.0, etc). Please, check your tariff in your [personal account]([price and condition])。
以下是查找问题的一些步骤。
1) 检查API键是否被激活
一些 API 服务在仪表板中提供关键信息,无论其是否激活、过期等。openWeatherMap 不提供。
验证您的密钥是否有效 'MAKE API CALL FROM BROWSER'
api.openweathermap.org/data/2.5/weather?q=peshawar&appid=API_key
将API_key换成你自己的key,如果你获取数据成功,那么你的key就激活了,否则要等几个小时才能激活。
2) 检查 .env 中的拼写错误和语法
.env 是用于在服务器端代码中隐藏凭证(例如 API_KEY)的文件。 确保您的 .env 文件变量使用正确的语法,即 名称=值
API_KEY=djgkv43439d90bkckcs
没有分号、引号等
3) 检查请求 URL
检查请求 url 将进行 API 调用的位置,确保
- 它没有空格、大括号等
- 根据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 文件的位置,将其移动到根目录可能会有所帮助(在评论中建议)
对于那些按照前面的答案仍然面临 401 问题的人:现在似乎需要通过 HTTPS 访问 API --- 至少对我来说是这样。一些较旧的指南和教程可能会继续在其代码中使用 http://
,因此您必须将其更改为 https://
。
据我所知,OpenWeather 的官方文档中没有提到这一点,他们的示例中也没有包含该协议。