【发布时间】:2017-02-08 15:09:16
【问题描述】:
我有很多软件在带有 ruby 1.8.6 的嵌入式系统上运行。一个脚本查询国家气象服务,几天前它停止工作:我开始收到<H1>Access Denied</H1>。这是一个公共接口,没有 API 密钥。
当我在我的开发机器上使用 ruby 1.8.6 运行这个脚本时,我得到了同样的错误。当我使用 ruby 1.9 运行它时,不会发生错误。
显然 NWS 上周以某种方式修改了他们的 HTTP 协议,这与 ruby 1.8.6 中的 Net:HTTP 不兼容
当我使用 curl 时,我得到了很好的响应。
代码是:
begin
xml = Net::HTTP.get_response(URI.parse(url)).body
rescue
我有 RestClient 1.6 并尝试用它代替 Net:HTTP 但它只是在内部使用 Net:HTTP 并且我得到一个 403 Forbidden。
有人知道协议中可能发生的变化以及解决方法吗?
我认为我可能能够从系统制造商处获得更新的固件,但我不愿走这条路,因为它会强制重写许多相当脆弱的黑客。
【问题讨论】:
-
作为替代方案,托管您自己的迷你 api,代理您知道可与旧堆栈一起使用的数据
-
尝试在您的开发机器上进行流量捕获(例如 tcpdump/Wireshark),包括工作和不工作的连接。如果从那里看不出差异,您可以尝试在此处发布 http 请求比较
-
您介意添加minimal reproducible example 吗?我可以运行一些代码来重现问题吗?
-
@Alien_AV 那是票。 Net:HTTP 1.8.6 不包括 User-Agent 字段。我添加了一个像this 这样的问题。谢谢! (也许您可以发表您的评论作为答案?)
标签: ruby