2013-07-06 4 views
11

機械化/ノコギリ宝石を使っていくつかのランダムなページを解析しています。 301/302リダイレクトに問題があります。ここでは、コードの抜粋です:ルビの機械化でリダイレクトを検出する

agent = Mechanize.new 
page = agent.get('http://example.com/page1') 

mydomain.com上のテストサーバーは、したがって、私が代わりに

page.code == "301" 

を持つように期待していた、301/302ステータスコードとPAGE2するのPage1をリダイレクトします私は常にpage.code == "200"を取得してください。

私の要件は以下のとおりです。

  • 私が欲しいが、私はそのページを検出できるようにしたい
  • (デフォルトは良い振る舞いを、機械化)に続くことをリダイレクトするには、実際に

をリダイレクトされました私はagent.historyのpage1を見ることができることを知っていますが、それは信頼できません。リダイレクトステータスコードも欲しいです。

どのように私は機械化でこの動作を達成できますか?

答えて

19

あなたはオフにリダイレクトするだけの場所ヘッダーを以下に保つを残すことができる:

agent.redirect_ok = false 
page = agent.get 'http://www.google.com' 
status_code = page.code 

while page.code[/30[12]/] 
    page = agent.get page.header['location'] 
end 
+0

は、ここでは無用のvar STATUS_CODEですか? – CodeGroover

+0

多分あなたにはOPがそれを求めた。 – pguardiario

3

リダイレクトを許可する方法とステータスコードを取得する方法が見つかりましたが、それが最良の方法であるかどうかはわかりません。

agent = Mechanize.new 

# deactivate redirects first 
agent.redirect_ok = false 

status_code = '200' 
error_occurred = false 

# request url 
begin 
    page = agent.get(url) 
    status_code = page.code 
rescue Mechanize::ResponseCodeError => ex 
    status_code = ex.response_code 
    error_occurred = true 
end 

if !error_occurred && status_code != '200' then 
    # enable redirects and request the page again 
    agent.redirect_ok = true 
    page = agent.get(url) 
end 
関連する問題