2017-02-08 6 views
1

私は、Ruby 1.8.6の組み込みシステムで多くのソフトウェアを実行しています。 1つのスクリプトが全国の天気予報を照会し、数日前にそれは動作を停止しました:私は<H1>Access Denied</H1>を取得し始めました。これは公開インターフェースであり、APIキーはありません。ruby​​ 1.8.6で廃止されたネットワークプロトコルを回避するには

開発マシンでruby 1.8.6を使用してこのスクリプトを実行すると、同じエラーが発生します。私がruby 1.9で実行すると、エラーは発生しません。

は明らかNWSは、ネットとの互換性がないこと、先週何らかの方法で彼らのHTTPプロトコルを変更:RubyでHTTP 1.8.6

URLは「http://graphical.weather.gov/xml/sample_products/browser_interface/ndfdXMLclient.php?lat=37&lon=-105&product=time-series&begin=&end=&sky=sky&maxt=maxt&mint=mint&Submit=Submit

である私が使用したとき、私は良い反応を得ますカール。

コードは次のとおりです。 begin xml = Net::HTTP.get_response(URI.parse(url)).body rescue

私はRestClient 1.6持っているとネットのことを置き換えてみました:内部HTTPと私は403 Forbiddenを取得:HTTPが、それは単にネットを使用しています。

プロトコルで変更された可能性のあることは誰でも知っていますか、それを回避する方法はありますか?

私はシステムメーカーからファームウェアを更新することができるかもしれないと思っていますが、それはかなり壊れやすいハックの多くを書き直すので、そのルートに行くことをためらっています。

+1

、あなたがあなたの古いスタック –

+0

と作品があなたのdevのマシン上で(例:tcpdumpを/ Wiresharkの)トラフィックのキャプチャを取ってみてください知っているデータをproxiesnwsあなた自身のミニAPIをホスティング作業中であっても接続できていないこと。 違いが明白でない場合は、httpリクエストの比較を投稿してみてください。 –

+0

[mcve]を追加してもよろしいですか?問題を再現するために実行できるコードだけですか? – thesecretmaster

答えて

2

トラフィックキャプチャ分析によれば、1.8.6ではデフォルトでHTTP User-Agentフィールドが追加されないという問題があります。それを追加する 一つの方法は次のとおりです。代替として

http = Net::HTTP.new("your.site.com", 80) 
req = Net::HTTP::Get.new("/path/to/the/page.html", {'User-Agent' => 'your_agent'}) 
response = http.request(req) 
puts response.body 
関連する問題