【问题标题】:National Weather Service API Internal server errorNational Weather Service API 内部服务器错误
【发布时间】:2018-05-20 23:20:03
【问题描述】:

尝试使用他们的新 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)测试了这段代码,它可以工作,但我的老板希望我改用 National Weather Service api。任何帮助表示赞赏!

【问题讨论】:

    标签: c# weather-api


    【解决方案1】:

    您提供的文档给了您答案:

    内容协商

    API 将使用 Accept 标头来修改 响应返回。有关更多信息,请参阅常见问题选项卡。参数 include:API 的版本,默认为最旧的 Format 响应,规范中的默认值 Accept 标头的示例 将是“接受:application/vnd.noaa.dwml+xml;version=1”

    添加:

    request.Headers.Add("Accept", "application/vnd.noaa.dwml+json;version=1");,您将收到 JSON 响应。

    【讨论】:

      【解决方案2】:

      错误 500 是内部服务器错误 - 这意味着服务器知道它出错并记录了它。

      由于您检索数据的方法适用于不同的 API,NWS API 很可能是故意悄悄拒绝该服务。也许它不喜欢您提供的电子邮件字符串,等等。

      当涉及到像这样的第三方 API 时,最好的选择是 (1) 遵循手册,如果存在的话(例如,“RTFM”)或 (2) 进行一些试验并尝试不同的东西,直到你找到有用的东西。

      例如,我发现许多服务(包括 API)不喜欢我的用户名@subdomain.domain.com 格式的电子邮件地址之一,并且会拒绝服务。我只有通过实验才能弄清楚这一点。

      【讨论】:

      • 或者 3) 联系他们,让他们知道他们的 API 出错了
      • @mason 是的,可能,但不太可能获得帮助
      猜你喜欢
      • 2010-10-05
      • 2011-08-24
      • 1970-01-01
      • 2022-08-03
      • 2019-12-21
      • 2014-11-19
      • 2017-05-12
      • 2016-01-10
      • 2016-08-07
      相关资源
      最近更新 更多