如何在Ruby中解析(而不是获取)HTTP请求

如何在Ruby中解析(而不是获取)HTTP请求,ruby,http,eventmachine,Ruby,Http,Eventmachine,我有一个集成测试,它使用eventmachine来接收http请求。这是我的eventmachine处理程序: class NotificationRecipient < EM::Connection def receive_data(data) EM.stop end end class NotificationRecipient

我有一个集成测试,它使用eventmachine来接收http请求。这是我的eventmachine处理程序:

class NotificationRecipient < EM::Connection
  def receive_data(data)
    EM.stop
  end
end
class NotificationRecipient
我需要测试接收到的请求的各种属性,例如,我想从我收到的HTTP POST请求字符串中提取json负载。有没有一种很好的包装方式


Google找到了很多方法来发出请求并解析响应,例如rest客户端将自动解析响应。但是,由于我正在接收请求,而不是发出请求,因此这些方法对我都不起作用。

我会使用
WEBrick
。有一个可用的解析器,您只需将一个
IO
对象传递给它的
parse
方法,就有了一个可以操作的对象

本例声明了一个POST请求,其中包含一个字符串中的JSON主体,并使用
StringIO
将其作为
IO
对象进行访问

require 'webrick'
require 'stringio'

Request = <<-HTTP
POST /url/path HTTP/1.1
Host: my.hostname.com
Content-Type: application/json
Content-Length: 62

{
  "firstName": "John",
  "lastName": "Smith",
  "age": 25
}
HTTP

req = WEBrick::HTTPRequest.new(WEBrick::Config::HTTP)
req.parse(StringIO.new(Request))

puts req.path
req.each { |head| puts "#{head}:  #{req[head]}" }
puts req.body

您是如何接收请求的?此处需要更多信息。你是怎么收到这封信的?轨道?西纳特拉?其他的?每个框架都有自己的特点,我们需要更多的信息来提供帮助。我正在使用eventmachine,并更新了问题以反映这一点。我很乐意使用eventmachine内置的功能。我以为会有一些通用的http gem独立于特定的发送和接收框架。也许可以满足您的需求。太好了!完成了任务,并且独立于web框架。@Borodin-如何发送请求?
/url/path
host:  my.hostname.com
content-type:  application/json
content-length:  62
{
  "firstName": "John",
  "lastName": "Smith",
  "age": 25
}