国家气象局 API 内部服务器错误
National Weather Service API Internal server error
尝试使用他们的新 API 获取数据时,我一直收到错误 500,即使我包含他们请求的 UserAgent 字符串也是如此:https://forecast-v3.weather.gov/documentation
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.weather.gov/points/40,-90/forecast/hourly");
request.UserAgent = "WeatherTest/v1.0 (http://www.website.com/; Email@email.com)";
// exception occurs here
using (Stream stream = request.GetResponse().GetResponseStream())
{
using (StreamReader streamReader = new StreamReader(stream))
{
var jsonData = streamReader.ReadToEnd();
}
}
但是我可以使用相同的url在浏览器上使用端点:https://api.weather.gov/points/40,-90/forecast/hourly
我还使用另一个 API(Weather Underground)测试了此代码并且它有效,但我的老板希望我改用国家气象局 api。任何帮助表示赞赏!
错误 500 是内部服务器错误 - 这意味着服务器知道它出错并记录了它。
由于您检索数据的方法适用于不同的 API,NWS API 很可能是故意悄悄地拒绝该服务。也许它不喜欢您提供的电子邮件字符串,等等。
当谈到像这样的第三方 API 时,您最好的选择是 (1) 遵守手册,如果存在的话(例如 "RTFM")或 (2) 到稍微试验一下,尝试不同的东西,直到找到有用的东西。
例如,我发现许多服务 - 包括 APIs - 不喜欢我的用户名@subdomain.domain.com 格式的电子邮件地址之一,并且会拒绝服务。只有通过实验,我才能弄明白这一点。
您提供的文档给了您答案:
Content Negotiation
The API will use Accept headers to modify the
response returned. See the FAQ tab for more information. Parameters
include: Version of the API, defaults to the oldest Format of the
response, default in specifications An example of the Accept header
would be "Accept: application/vnd.noaa.dwml+xml;version=1"
添加:
request.Headers.Add("Accept", "application/vnd.noaa.dwml+json;version=1");
,您将收到 JSON 回复。
尝试使用他们的新 API 获取数据时,我一直收到错误 500,即使我包含他们请求的 UserAgent 字符串也是如此:https://forecast-v3.weather.gov/documentation
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.weather.gov/points/40,-90/forecast/hourly");
request.UserAgent = "WeatherTest/v1.0 (http://www.website.com/; Email@email.com)";
// exception occurs here
using (Stream stream = request.GetResponse().GetResponseStream())
{
using (StreamReader streamReader = new StreamReader(stream))
{
var jsonData = streamReader.ReadToEnd();
}
}
但是我可以使用相同的url在浏览器上使用端点:https://api.weather.gov/points/40,-90/forecast/hourly
我还使用另一个 API(Weather Underground)测试了此代码并且它有效,但我的老板希望我改用国家气象局 api。任何帮助表示赞赏!
错误 500 是内部服务器错误 - 这意味着服务器知道它出错并记录了它。
由于您检索数据的方法适用于不同的 API,NWS API 很可能是故意悄悄地拒绝该服务。也许它不喜欢您提供的电子邮件字符串,等等。
当谈到像这样的第三方 API 时,您最好的选择是 (1) 遵守手册,如果存在的话(例如 "RTFM")或 (2) 到稍微试验一下,尝试不同的东西,直到找到有用的东西。
例如,我发现许多服务 - 包括 APIs - 不喜欢我的用户名@subdomain.domain.com 格式的电子邮件地址之一,并且会拒绝服务。只有通过实验,我才能弄明白这一点。
您提供的文档给了您答案:
Content Negotiation
The API will use Accept headers to modify the response returned. See the FAQ tab for more information. Parameters include: Version of the API, defaults to the oldest Format of the response, default in specifications An example of the Accept header would be "Accept: application/vnd.noaa.dwml+xml;version=1"
添加:
request.Headers.Add("Accept", "application/vnd.noaa.dwml+json;version=1");
,您将收到 JSON 回复。