gpt4 book ai didi

ruby - Ruby 中的简单 HTTP 服务器

转载 作者:可可西里 更新时间:2023-11-01 17:36:06 25 4
gpt4 key购买 nike

我正在构建一个简单的 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 消息比这要复杂一些。基本方法是解析 header 并提取内容长度,然后您可以从正文中读取那么多字节,您就会知道您已到达消息末尾。当然,如果您开始考虑分块传输编码之类的事情,这会变得更加复杂。

关于ruby - Ruby 中的简单 HTTP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31089096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com