我正在制作我的第一个Web服务器,但是当我使用if语句将用户从html文件输入的内容与字符串进行比较时,即使它是真的,它们也会跳过它。
require 'socket'
require 'pry'
class Parser
def parse(req, clients)
save = File.new("requests.txt", "w+")
save.write(req.chomp)
save.close
words = IO.readlines("requests.txt").last(1)
if words == "Username=test&Password=1234"
success(clients)
end
#binding.pry
puts words
end
end
def success(succ_client)
success_file = File.read("templates/success.html")
stuff = "HTTP/1.1 200\r\n" + success_file.force_encoding('UTF-8')
succ_client.puts(stuff)
end
def response(cli)
file = File.read("templates/passpage.html")
content = "HTTP/1.1 200\r\n" + file.force_encoding('UTF-8')
cli.puts(content)
end
serv_sock = TCPServer.new('10.0.2.15', 8080)
loop {
client = serv_sock.accept()
requests = Parser.new
requests.parse(client.readpartial(2043), client)
response(client)
client.close
puts "Connected"
}
我试着用#compact!,nil?,用pry来解码来找出问题所在,但是我就是找不到问题所在,当我把单词变量放进去的时候,它会放进正确的值,但是我猜它不是正确的值。我试着解码单词,但是仍然不起作用,除非我做错了。这个问题已经解决了5天了,这是我的第一个ruby程序,和网络服务器,所以我很感激任何帮助,我可以得到与此前进的生活。
1条答案
按热度按时间92dk7w1h1#
您的代码存在几个问题。
对
IO.readlines("requests.txt").last(1)
的调用主要返回零个或一个字符串的Array。但是,您将它与单个字符串进行比较。由于字符串不等于数组,因此比较失败。很可能,你想使用
IO.readlines("requests.txt").last
来代替,如果readlines
方法返回的数组是空的,则返回最后一个元素或数组或nil
。请查看
Array#last
方法的文档,以了解有关此方法返回类型的更多信息。除此之外,即使您的
if
语句最终匹配,您对success
方法fill的预期调用也会失败,因为您已经在全局main
对象而不是Parser
类中定义了它。此外,当您最终从
parse
方法调用success
时,将返回两个响应,因为您稍后也调用response
方法。您可能需要重新考虑选择正确响应的方式...