No commit activity in last 3 years
No release in over 3 years
Fast Ruby Parser inpired by Node
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

>= 0
>= 1.4.6
>= 3
 Project Readme

http_parser.rb

A simple callback-based HTTP request/response parser for writing http servers, clients and proxies.

This gem is built on top of joyent/http-parser and its java port http-parser/http-parser.java.

Supported Platforms

This gem aims to work on all major Ruby platforms, including:

  • MRI 1.8, 1.9 and 2.0
  • Rubinius
  • JRuby
  • win32

Usage

require "http/parser"

parser = Http::Parser.new

parser.on_headers_complete = proc do
  p parser.http_version

  p parser.http_method # for requests
  p parser.request_url

  p parser.status_code # for responses

  p parser.headers
end

parser.on_body = proc do |chunk|
  # One chunk of the body
  p chunk
end

parser.on_message_complete = proc do |env|
  # Headers and body is all parsed
  puts "Done!"
end

Feed raw data from the socket to the parser

parser << raw_data

Advanced Usage

Accept callbacks on an object

module MyHttpConnection
  def connection_completed
    @parser = Http::Parser.new(self)
  end

  def receive_data(data)
    @parser << data
  end

  def on_message_begin
    @headers = nil
    @body = ''
  end

  def on_headers_complete(headers)
    @headers = headers
  end

  def on_body(chunk)
    @body << chunk
  end

  def on_message_complete
    p [@headers, @body]
  end
end

Stop parsing after headers

parser = Http::Parser.new
parser.on_headers_complete = proc{ :stop }

offset = parser << request_data
body = request_data[offset..-1]