我要尝试的是向用户询问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)
答案 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