繁体   English   中英

Ruby中的简单HTTP服务器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM