尝试使用新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();
}
}
但我可以使用相同的网址https://api.weather.gov/points/40,-90/forecast/hourly
在浏览器上使用端点我还用另一个API(Weather Underground)测试了这段代码并且它可以工作,但我的老板要我使用国家气象服务API。任何帮助表示赞赏!
答案 0 :(得分:3)
您提供的文档为您提供了答案:
内容谈判
API将使用Accept标头来修改 回复了。有关详细信息,请参阅FAQ选项卡。参数 include:API的版本,默认为最旧的格式 响应,规范中的默认值Accept头的示例 将是“Accept:application / vnd.noaa.dwml + xml; version = 1”
添加:
request.Headers.Add("Accept", "application/vnd.noaa.dwml+json;version=1");
您将收到JSON回复。
答案 1 :(得分:0)
错误500是内部服务器错误 - 这意味着服务器知道它出错并记录它。
由于您检索数据的方法适用于不同的API,因此NWS API似乎很可能是故意悄悄地拒绝服务。也许它不喜欢您提供的电子邮件字符串,依此类推。
对于像这样的第三方API,你最好的选择是(1)按照手册,如果存在(例如,“RTFM”)或(2)尝试一下并尝试不同的东西,直到你找到有用的东西。
例如,我发现许多服务 - 包括API - 不喜欢我的一个电子邮件地址,格式为username@subdomain.domain.com,并拒绝服务。只有经过实验才能弄清楚这一点。