2012-12-28 60 views
0

這裏是一個URL如何使用Net :: HTTP在Ruby中阻止此代碼?

http://192.168.1.2:1218/?name=verify_code_string_queue&opt=get&auth=verify_code_string_queue 

它會返回一個字符串或類似SQS_GET_END

狀態代碼現在我需要打破循環當URL返回一個字符串,或繼續阻止。

這裏是我的代碼

require 'net/http' 
require 'open-uri' 
loop do 
    codeText = open("http://192.168.1.2:1218/?name=verify_code_string_queue&opt=get&auth=verify_code_string_queue") do |repo| 
    repo.read 
    end 
    if codeText != "SQS_GET_END" 
    break 
    end 
end 

但它不能正常工作,輸出不能分配請求的地址 - (2)連接(錯誤:: EADDRNOTAVAIL)。 請告訴我如何解決它,謝謝

+0

如果它不是你正在使用的主機,是192.168.1.2從您的主機是否可達? –

+0

你的問題到底是什麼?你想知道你爲什麼得到EADDRNOTAVAIL錯誤,或者你想'捕捉'錯誤並繼續循環? – rdvdijk

+0

Anand,我當然可以達到192.168.1.2。 – Zhurong

回答

0

問題是,你在短時間內做了太多的請求。這將導致Errno::EADDRNOTAVAIL錯誤。您可以在循環中添加sleep,以限制您發出的請求數量。

事情是這樣的:

require 'net/http' 
require 'open-uri' 
loop do 
    codeText = open("http://192.168.1.2:1218/?name=verify_code_string_queue&opt=get&auth=verify_code_string_queue") do |repo| 
    repo.read 
    end 
    if codeText != "SQS_GET_END" 
    break 
    end 
    sleep 1 # <= sleep for one second 
end 
+0

是的,就是這樣,謝謝,它工作。 – Zhurong

+1

隨時接受這個答案:) – rdvdijk