如何在Ruby中解析(而不是获取)HTTP请求
我有一个集成测试,它使用eventmachine来接收http请求。这是我的eventmachine处理程序:如何在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
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
}