2011-04-07 3 views
3

Mechanize을 사용하여 응답하지 않는 사이트를 가져 오는 경우 대기 상태가 계속 유지되는 것으로 나타났습니다.응답이없는 웹 사이트에서 머큐리 대기에 대해 수행 할 수있는 작업은 무엇입니까?

이 문제를 어떻게 극복 할 수 있습니까?

+0

사이트가 무엇이며 오류가 무엇입니까? – Wukerplank

+0

문제가있는 사이트의 예 : karusela.net –

+0

-1 질문이 너무 모호합니다. 지금까지 시도한 것을 보여주지는 마세요. Stack Overflow의 모든 것이 질문이기 때문에 "Question"은 질문 제목에서 중복됩니다. –

답변

8

처리 방법에는 몇 가지가 있습니다.

Open-Uri 및 Net :: HTTP는 시간 초과 값을 전달하는 방법을 가지고 있으며, 그러면 기본 네트워킹 스택에 기다릴 시간을 알려줍니다. 예를 들어, 기계화는 인스턴스를 초기화 할 때 그 설정 같은, 무언가를 얻을 수 있습니다 :

mech = Mechanize.new { |agent| 
    agent.open_timeout = 5 
    agent.read_timeout = 5 
} 

그것은 new의 문서에있는 모든입니다하지만 당신은 당신이 얻을 수있는 인스턴스의 변수를 확인하기 위해 소스를 볼 수있을 것이다 에서.

아니면 루비의 timeout 모듈을 사용할 수 있습니다 :이 페이지의

require 'timeout' 
status = Timeout::timeout(5) { 
    # Something that should be interrupted if it takes too much time... 
} 
+2

+1'timeout' 모듈 –

+1

에 대해 기계화 타임 아웃이 무시 당하고 있다고 말할 수있는 한 ... – Eskim0

+0

만약 이것이 맞다면 Mechanize 작가와 함께 생각해야한다. –

3

http://mechanize.rubyforge.org/mechanize/Mechanize.html 2 개 문서화되지 않은 속성 open_timeoutread_timeout가 그들을 사용해보십시오.

agent = Mechanize.new { |a| a.log = Logger.new("mech.log") } 
agent.keep_alive=false 
agent.open_timeout=15 
agent.read_timeout=15 

HTH

관련 문제