1

私はhttp://ruby.bastardsbook.com/chapters/web-crawling/でチュートリアルを進めていますが、作者が例として使用したDODウェブサイトが書面の時点から再作成されているため、Handling Redirectsの説明を少ししたいと思います現在のバージョンで動作するようにコードを調整している間に、予期せぬ結果に遭遇しました。 (コードを書き直す手助けは必要ありませんが、なぜここで起こることが起こるのだろうと思っています)Ruby:Net :: HTTPとリダイレクト

具体的には、取得しようとしているページがNet::HTTP.get_response存在するか否かを判断する。たとえば、

require 'net/http' 

VALID = 'https://www.defense.gov/News/Contracts/Contract-View/Article/14038760' 
INVALID = 'https://www.defense.gov/News/Contracts/Contract-View/Article/14038759' 

resp = Net::HTTP.get_response(URI.parse(VALID)) 
puts resp.code # 301 

resp = Net::HTTP.get_response(URI.parse(INVALID)) 
puts resp.code # 301 

したがって、有効なアドレスは301 Moved Permanentlyを返します。それだけでなく、実際にリダイレクト(このチュートリアルの範囲では無用ですが、ここでは2xxでないものをスキップすることになっていました)をRuby Net::HTTP - following 301 redirectsに示すと、リダイレクトリンク末尾にスラッシュが付きます。さらに不可解な私には

if resp.code == '301' 
    resp = Net::HTTP.get_response(URI.parse(resp.header['location'])) 
end 
puts resp.code # 404 

は私がresp.bodyを見たとき、私はその404エラーにもかかわらず、私は、実際には、成功したページの内容をダウンロードしていたことがわかったということです。

ここで何が起こっているのか誰かが私を歩いてくれたらとても感謝しています。あなたのお手伝いをしていただきありがとうございます。

答えて

0

Rubyのようなものではなく、www.defense.govのようなものです。 https://www.defense.gov/News/Contracts/Contract-View/Article/14038760は、リダイレクト(301)を取得してから、取得する方法にもかかわらず404を返します。

https://www.defense.gov/News/Contracts/Contract-View/Article/14038760は、一部のデータが欠落しているようですが、https://www.defense.gov/News/Contracts/Contract-View/Article/1403876/は問題なく動作します(実際は26.17.2017 03:24 +7)。なぜID 14038760のURLが有効だと思いますか?

https://www.defense.gov/News/Contracts/Contract-View/Article/1403876は、https://www.defense.gov/News/Contracts/Contract-View/Article/1403876/(同じURLですが末尾にスラッシュが付いています)にリダイレクトされていますが、末尾にスラッシュが付いたURLはすぐに200の応答を返します。

どうすればよいですか?ここでhttps://www.defense.gov/News/Contracts/source/nav/に実際の契約のリストを取得してから、それぞれに別々のリクエストを要求してください。

+0

ハハ、あなたはそうだ、私は0がリンクの終わりにいかに固執しているのか分からない、私はある時点でそれを手動で入力しなければならないと気付かなかった。そして、実際に契約の実際のリストをつかむことは、正当性について150万のURLのようにチェックするよりはるかに合理的な考えのように思える、私はそれが人のチュートリアルで何をしているのか分からない/ httpとノコギリ。ありがとうございました! –

+0

ああ、私は再確認し、チュートリアルの契約IDがちょうど4653に上がったと書いていたので、それはそうするのはそんなに奇妙なことではありませんでした。 –

関連する問題