私は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がリンクの終わりにいかに固執しているのか分からない、私はある時点でそれを手動で入力しなければならないと気付かなかった。そして、実際に契約の実際のリストをつかむことは、正当性について150万のURLのようにチェックするよりはるかに合理的な考えのように思える、私はそれが人のチュートリアルで何をしているのか分からない/ httpとノコギリ。ありがとうございました! –
ああ、私は再確認し、チュートリアルの契約IDがちょうど4653に上がったと書いていたので、それはそうするのはそんなに奇妙なことではありませんでした。 –