【问题标题】:How do I properly ask a user for a URL and check to see if that site is up?如何正确地向用户询问 URL 并检查该站点是否已启动?
【发布时间】:2018-08-24 07:51:22
【问题描述】:

我想做的是向用户询问一个 URL,然后查询该 URL 以查看它是否已启动,并以“响应 OK!”作为响应。如标题所述。

require 'net/http'
require 'url'

我在这里向用户询问一个 url 并尝试将该字符串定义为一个变量:

puts "\n\nWhat website would you like to check?\n\n"
  userinput = gets.chomp

这里我正在检查带有该变量 $userinput 的 HTTP 响应

def main
  while true
    uri = URI.parse($userinput)
    response = Net::HTTP::get_response(uri)
    if response.code == "200"
      puts "Response OK!"
    else
      puts "Received #{response.code} code. Probing again in 15s..."
    end
    sleep(15)
  end
end

# Exit on CTRL-C SIGINT 
Signal.trap("INT") {
  puts "\nUser exited."
  exit
}

main ()

下面是实际代码。我不知道如何粘贴这个:

What website would you like to check?

http://www.reddit.com
Traceback (most recent call last):
    1: from prober.rb:33:in `<main>'
prober.rb:14:in `main': wrong number of arguments (given 1, expected 0)               (ArgumentError)

删除 main() 之间的空格会导致:

Traceback (most recent call last):
5: from prober.rb:33:in `<main>'
4: from prober.rb:16:in `main'
3: from /usr/local/Cellar/ruby/2.5.1/lib/ruby/2.5.0/uri/common.rb:237:in `parse'
2: from /usr/local/Cellar/ruby/2.5.1/lib/ruby/2.5.0/uri/rfc3986_parser.rb:73:in `parse'
1: from /usr/local/Cellar/ruby/2.5.1/lib/ruby/2.5.0/uri/rfc3986_parser.rb:15:in `split'

/usr/local/Cellar/ruby/2.5.1/lib/ruby/2.5.0/uri/rfc3986_parser.rb:18:in `rescue in split': bad URI(is not URI?): (URI ::InvalidURIError)

【问题讨论】:

  • 如果正在寻找如何实现 url 有效检查器的方法,请查看 this 答案。任何其他问题都可以更好地添加相应的错误堆栈跟踪。
  • 您想查看哪个网站? reddit.com Traceback(最近一次调用最后一次):1:来自 prober.rb:33:in &lt;main&gt;' prober.rb:14:in main':参数数量错误(给定 1,预期为 0)(ArgumentError)
  • 您可以编辑您的问题,添加您评论的输出。那和任何其他信息。您可以添加以便我们更好地了解您的问题。
  • 对于特定问题,删除main 和括号之间的空格。 Ruby,由于接受不带括号的方法调用的灵活性,因此使用空括号作为方法参数,因此您的 ArgumentError。
  • 我看到了链接,但那是每次都检查静态网址。我希望它检查用户定义的变量,例如 $userinput 和 gets.chomp 的使用——删除 main () 之间的空格会给我带来更多错误呵呵

标签: ruby


【解决方案1】:

对于这个 ArgumentError 问题:

Traceback (most recent call last):
    1: from prober.rb:33:in `<main>'
prober.rb:14:in `main': wrong number of arguments (given 1, expected 0)

去掉主括号和括号之间的空格。 Ruby,由于接受不带括号的方法调用的灵活性,因此使用空括号作为方法参数。

如果你想将用户输入传递给你的 main 方法,那么你需要为它声明一个参数(比使用全局变量更好)。

您可以使用gets.chomp 来存储用户输入,当您调用主函数时,您可以将其作为参数传递。

所以可以这样:

def main(user_input)
  while true
    uri = URI.parse(user_input)
    response = Net::HTTP.get_response(uri)
    ...
  end
end

puts "\n\nWhat website would you like to check?\n\n"
userinput = gets.chomp
main(userinput)

注意() 在“空上下文”中的使用被解释为nil 对象。这对于引发 ArgumentError 异常显然是有效的。

p ()
# nil

【讨论】:

    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多