如何正确地向用户询问URL并检查该站点是否正常?

时间:2018-08-23 23:11:25

标签: ruby

我要尝试的是向用户询问URL,然后查询该URL以查看其是否启动,然后单击“ Response OK!”(响应确定!)进行响应。如标题所述。

require 'net/http'
require '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:在`rescue in split'中:错误的URI(不是URI?):(URI :: InvalidURIError)

1 个答案:

答案 0 :(得分:0)

对于此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)

删除main和括号之间的空间。 Ruby由于可以灵活地接受不带括号的方法调用,因此将空括号用作方法参数。

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

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

所以可以像这样:

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