【问题标题】:How can I block this code with Net::HTTP in ruby?如何在 ruby​​ 中使用 Net::HTTP 阻止此代码?
【发布时间】:2012-12-13 11:08:17
【问题描述】:

这是一个网址

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

但它不起作用,输出无法分配请求的地址 - connect(2) (Errno::EADDRNOTAVAIL)。 请告诉我如何解决,谢谢

【问题讨论】:

  • 如果它不是您正在处理的主机,是否可以从您的主机访问 192.168.1.2?
  • 您的问题到底是什么?您想知道为什么会收到 EADDRNOTAVAIL 错误,还是想“捕获”错误并继续循环?
  • 阿南德,我当然可以到达192.168.1.2。
  • rdvdijk,我想知道我收到 EADDRNOTAVAIL 错误的原因。
  • 检查这个问题及其答案:stackoverflow.com/questions/3886506/…

标签: ruby block open-uri


【解决方案1】:

问题是您在短时间内执行了太多请求。这将导致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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多