使用OpenWeatherMap API时出现401错误

13
我正在尝试获取伦敦的天气数据,但是我遇到了“HTTPError: HTTP Error 401: Unauthorized”的错误。如何使API正常工作?
import urllib2
url = "http://api.openweathermap.org/data/2.5/forecast/daily?q=London&cnt=10&mode=json&units=metric"
response = urllib2.urlopen(url).read()
11个回答

20

在打开文档时,会提示您首先需要注册API密钥。

为了使用API,您需要注册一个API密钥

如果您的url不包含密钥,则该网站会告诉您未经授权。按照说明获取密钥,然后将其添加到查询参数中即可。

http://api.openweathermap.org/data/2.5/forecast/daily?APPID=12345&q=...

8

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

API调用响应401错误: 以下情况会导致您收到错误401:

以下是找到问题的一些步骤。

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

一些API服务在仪表板中提供密钥信息,例如是否已激活、过期等。openWeatherMap没有。 要验证密钥是否起作用,请使用浏览器进行“MAKE API CALL FROM BROWSER”测试 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) 检查请求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 的值,否则将打印解析时发生的错误。
希望能有所帮助 :)

如果您没有使用dotenv包来隐藏API密钥,则可以跳过.env步骤。 - Muhammad Uzair

4
我也遇到了同样的问题,我刚在open weather map上创建了一个帐户并通过电子邮件进行了验证,在尝试使用几个不同的URL加载API时,它们都返回了401,即未找到API密钥。
解决方案:大约1小时后,它们开始工作了,所以问题是激活需要1个或更多小时。

这并没有真正回答问题。如果您有不同的问题,可以通过点击提问来提出。如果您想在此问题获得新的答案时收到通知,您可以关注此问题。一旦您拥有足够的声望,您还可以添加悬赏以吸引更多关注。- 来自审核 - isaactfa
@isaactfa 实际上,这可能是对问题的一个有效答案。OpenWeatherMap FAQ甚至将其列为401错误的可能解决方案之一:“您的API密钥尚未激活。在接下来的几个小时内,它将被激活并准备好使用。” - undefined

2
作为一名毕业生的帮助者,他拥有正确的API密钥并且密钥是激活的,但当没有提供内容类型时,API错误地返回了401。
只需添加Content-Type: application/json即可解决问题,API开始正常工作。
curl命令。
curl --location \
  --request GET \
  'https://api.openweathermap.org/data/2.5/forecast?lat=55&lon=-3&appid=xxx' \
  --header 'Content-Type: application/json'

这是对我来说正确的答案。 - Grace Huang
这对我起作用了,但关键是要用引号括起来URL。对我来说,--request--header标志是不必要的,也能让事情正常运行。 - undefined

0

注册后,您需要验证电子邮件。


这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Simas Joneliunas

0

0
你必须通过在openweathermap注册并确认你的电子邮件来获得有效的API密钥,并确保你符合他们最新的API规范。
通过在URL中附加密钥&appid=<yourkey>,可以通过注册获得有效的API密钥。
请确保REST API URL符合他们当前的API规范,可以在https://openweathermap.org/current#geo找到。
他们最近进行了重构,并从API中删除了一些部分,如"daily",如果添加会导致错误401,所以请将其删除。
所以,请将你的URL更改为: url = "http://api.openweathermap.org/data/2.5/forecast?q=London&cnt=10&mode=json&units=metric&appid=<yourkey>

0
在网站的API文档中,它告诉你使用以下URL连接到API: "https://api.openweathermap.org/data/3.0/onecall?lat=$latitude&lon=$longitude&appid=$apiKey"
然而,在验证了你的电子邮件之后,你将收到另一封电子邮件,其中包含你的API密钥以及API调用URL的示例: "https://api.openweathermap.org/data/2.5/weather?lat=$latitude&lon=$longtitude&APPID=$apiKey"
我正在使用免费订阅,并且尝试了多次使用第一个URL,但始终被拒绝访问。只有在我使用第二个URL(在第二封电子邮件中提供给我的)之后,它才开始正常工作。

0
现在你需要购买付费计划才能获取每日预测。


0
如果您在URL中的所有参数都正确的情况下仍然遇到401错误,最有可能的问题是激活。在我的情况下,生成API密钥后,第一次需要10分钟,第二次需要60分钟以上。因此,基本上需要等待10分钟到60分钟才能完全激活。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接