从Ruby TCPSocket上的HTTP连接提取uri参数

从Ruby TCPSocket上的HTTP连接提取uri参数,ruby,Ruby,我的第一个问题是。。。所以要温柔:D 我有以下代码: server = TCPServer.new('localhost', 8080) loop do socket = server.accept # Do something with the URL parameters response = "Hello world"; socket.print response socket.close end 关键是,我希望能够检索HTTP请求的URL中是否发

我的第一个问题是。。。所以要温柔:D

我有以下代码:

server = TCPServer.new('localhost', 8080)
loop do
    socket = server.accept
    # Do something with the URL parameters
    response = "Hello world";
    socket.print response
    socket.close
end
关键是,我希望能够检索HTTP请求的URL中是否发送了任何参数

示例:

根据这项请求:

curl http://localhost:8080/?id=1&content=test    
我希望能够检索如下内容:

{id => "1", content => "test"}    
我一直在寻找CGI::Parse[1]或类似的解决方案,但我还没有找到从TCPSocket中提取数据的方法

[1]

仅供参考:我需要一个最小的http服务器,以便接收几个参数,并希望避免使用gems和/或完整的http包装器/帮助器,如Rack


不用说。。。但是请提前感谢。

如果您想看到一个非常小的服务器,这里有一个。它只处理两个参数,并将字符串放入数组中。您需要做更多的工作来处理数量可变的参数

这里有关于服务器代码的更全面的解释


如果你想看到一个非常小的服务器,这里有一个。它只处理两个参数,并将字符串放入数组中。您需要做更多的工作来处理数量可变的参数

这里有关于服务器代码的更全面的解释


如果你想看到一个非常小的服务器,这里有一个。它只处理两个参数,并将字符串放入数组中。您需要做更多的工作来处理数量可变的参数

这里有关于服务器代码的更全面的解释


如果你想看到一个非常小的服务器,这里有一个。它只处理两个参数,并将字符串放入数组中。您需要做更多的工作来处理数量可变的参数

这里有关于服务器代码的更全面的解释


Rack不是HTTP服务器。它是一个模块化接口,包装了请求和响应,使编写ruby代码来处理web请求变得更容易。简而言之,它听起来正是您想要的,除非您只是想解析原始套接字数据来了解一些东西。Edited;)它看起来完全可以满足我的需要,我只是想知道是否有一种“简单”的方法(我可能没有)可以在不使用Rack的情况下解析它。Rack不是HTTP服务器。它是一个模块化接口,包装了请求和响应,使编写ruby代码来处理web请求变得更容易。简而言之,它听起来正是您想要的,除非您只是想解析原始套接字数据来了解一些东西。Edited;)它看起来完全可以满足我的需要,我只是想知道是否有一种“简单”的方法(我可能没有)可以在不使用Rack的情况下解析它。Rack不是HTTP服务器。它是一个模块化接口,包装了请求和响应,使编写ruby代码来处理web请求变得更容易。简而言之,它听起来正是您想要的,除非您只是想解析原始套接字数据来了解一些东西。Edited;)它看起来完全可以满足我的需要,我只是想知道是否有一种“简单”的方法(我可能没有)可以在不使用Rack的情况下解析它。Rack不是HTTP服务器。它是一个模块化接口,包装了请求和响应,使编写ruby代码来处理web请求变得更容易。简而言之,它听起来正是您想要的,除非您只是想解析原始套接字数据来了解一些东西。Edited;)它看起来完全可以满足我的需要,我只是想知道是否有一种“简单”的方法(我可能没有)来解析它,而不必使用Rack.Great。如果没有更多的“红宝石”方式,这正是我想要的;)谢谢伟大的如果没有更多的“红宝石”方式,这正是我想要的;)谢谢伟大的如果没有更多的“红宝石”方式,这正是我想要的;)谢谢伟大的如果没有更多的“红宝石”方式,这正是我想要的;)谢谢
require "socket"

server = TCPServer.new('localhost', 8080)
loop do
    socket = server.accept
    request = socket.gets

    # Here is the first line of the request. There are others.
    # Your parsing code will need to figure out which are
    # the ones you need, and extract what you want. Rack will do
    # this for you and give you everything in a nice standard form.

    paramstring = request.split('?')[1]     # chop off the verb
    paramstring = paramstring.split(' ')[0] # chop off the HTTP version
    paramarray  = paramstring.split('&')    # only handles two parameters

    # Do something with the URL parameters which are in the parameter array

    # Build a response!
    # you need to include the Content-Type and Content-Length headers
    # to let the client know the size and type of data
    # contained in the response. Note that HTTP is whitespace
    # sensitive and expects each header line to end with CRLF (i.e. "\r\n")

    response = "Hello world!"

    socket.print "HTTP/1.1 200 OK\r\n" +
                 "Content-Type: text/plain\r\n" +
                 "Content-Length: #{response.bytesize}\r\n" +
                 "Connection: close\r\n"

    # Print a blank line to separate the header from the response body,
    # as required by the protocol.
    socket.print "\r\n"
    socket.print response
    socket.close
end