[英]Simple HTTP server in Ruby
我正在构建一个简单的HTTP服务器,并且在处理POST请求时遇到一些问题。 这是创建它的方法:
def make_post_request
puts "Enter the name: "
name = gets.chomp
puts "Enter the email: "
email = gets.chomp
data = { person: { name: name, email: email } }
puts data.to_json
request = "POST /thanks.html HTTP/1.0\nContent-Length: #{data.to_s.length}\r\n\r\n#{data.to_json}"
return request
end
这是服务器代码(不完整):
request = ""
while line = client.gets
request << line.chomp
end
问题是服务器没有收到“ \\ r \\ n \\ r \\ n”后面的部分,我的代码有什么问题?
从代码中还不清楚您正在做什么,但是我怀疑您的问题是您依赖gets
,它将尝试从IO对象返回整行。 这意味着它将继续阻止等待套接字中的换行符(或将其关闭)。
由于您的数据不是以换行符结尾,并且客户端可能正在等待响应(因此不会关闭连接),因此服务器正在等待永远不会出现的换行符。
您可以在请求的末尾添加一个\\n
,这可能会使您的代码在这里工作,但是通常来说,使用主体解析HTTP消息比这要复杂一些。 基本方法是解析标头并提取内容长度,然后您可以从正文中读取很多字节,并且您将知道已到达消息末尾。 当然,如果您开始考虑分块传输编码之类的话,这将变得更加复杂。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.