使用 OpenWeatherMap API 出现 401 错误

问题描述 投票:0回答:9

我正在尝试以 JSON 格式获取伦敦的天气数据,但我得到的是

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()
python weather-api openweathermap
9个回答
20
投票

打开的文档会告诉您需要先注册 API 密钥。

要访问 API,您需要注册 API 密钥

由于您的网址不包含密钥,因此该网站会告诉您您没有获得授权。按照说明获取密钥,然后将其添加到查询参数中。

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 则不会。 验证您的密钥是否正常工作“从浏览器进行 API 调用”

api.openweathermap.org/data/2.5/weather?q=peshawar&appid=API_key

将 API_key 替换为您自己的密钥,如果成功获取数据则您的密钥已激活,否则请等待几个小时才能激活密钥。

2)检查 .env 中的拼写错误和语法

.env 是用于在服务器端代码中隐藏 API_KEY 等凭据的文件。 确保您的 .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_KEY 值,否则将打印解析时发生的错误。

希望有帮助:)


3
投票

我也遇到了同样的问题,我刚刚在开放天气地图上创建了一个帐户,并验证了电子邮件,尝试使用几个不同的网址加载api,但他们回复 401 ,未找到api密钥。

解决方案:1小时后全部开始工作,所以原因是激活需要1个多小时。


1
投票

对于我正在帮助的一名毕业生,他有一个正确的 api 密钥并且处于活动状态,但是当没有给出内容类型时,api 错误地出现 401

很简单,只需添加一个内容类型:application/json,嘿,API 很快就开始工作了

卷曲命令

curl --location \
  --request GET \
  'https://api.openweathermap.org/data/2.5/forecast?lat=55&lon=-3&appid=xxx' \
  --header 'Content-Type: application/json'

0
投票

您的网址中未设置 api 密钥!首先,您必须在 https://openweathermap.org/ 中注册,然后在您的个人帐户中获取 api 密钥,然后执行以下操作: http://api.openweathermap.org/data/2.5/weather?q={city}&appid=YOUR_API_KEY_HERE&units=metric

将您的 apikey 代码替换为 {YOUR_API_KEY_HERE} 然后运行你的应用程序。


0
投票

注册后需要验证邮箱。


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=$longitude&APPID=$apiKey”

我正在免费订阅,并多次尝试第一个 URL,但访问始终被拒绝。它只有在我使用第二个 URL(在第二封电子邮件中提供给我)后才开始工作。


0
投票

有时也会因为url中的参数命名错误而发生。

url = f"https://api.openweathermap.org/data/2.5/forecast?lat={latitude}&lon={longitude}&appid={api_key}"

就我而言,我正在就地“预测”进行一次调用。这种愚蠢的错误也时有发生。谢谢。


0
投票

您必须通过注册 openweathermap 并确认您的电子邮件来获得有效的 API 密钥,并确保您符合他们最新的 API。

通过注册将有效的 API 密钥附加到您的 URL 上并使用

&appid=<yourkey>

来应用

确保 REST API URL 符合其当前的 API 规范(位于 https://openweathermap.org/current#geo

他们最近进行了重构,并从 API 中删除了一些部分,例如“daily”,因此如果添加也会导致错误 401,因此请将其删除。

因此将您的网址更改为:

url = "http://api.openweathermap.org/data/2.5/forecast?q=London&cnt=10&mode=json&units=metric&appid=<yourkey>

© www.soinside.com 2019 - 2024. All rights reserved.