Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Asynchronous HTTP Client (EventMachine + Ruby)
Ruby C
branch: master

This branch is 7 commits ahead, 540 commits behind igrigorik:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
examples
ext
lib
test
.autotest
.gitignore
LICENSE
README.rdoc
Rakefile
em-http-request.gemspec

README.rdoc

EM-HTTP-Client

EventMachine based HTTP Request interface. Supports streaming response processing, uses Ragel HTTP parser.

  • Simple interface for single & parallel requests via deferred callbacks

  • Automatic gzip & deflate decoding

  • Basic-Auth support

  • Custom timeouts

Screencast / Demo of using EM-HTTP-Request:

- http://everburning.com/news/eventmachine-screencast-em-http-request/

Simple client example

EventMachine.run {
  http = EventMachine::HttpRequest.new('http://127.0.0.1/').get :query => {'keyname' => 'value'}, :timeout => 10

  http.callback {
    p http.response_header.status
    p http.response_header
    p http.response

    EventMachine.stop
  }
}

Multi request example

EventMachine.run {
  multi = EventMachine::MultiRequest.new

  # add multiple requests to the multi-handler
  multi.add(EventMachine::HttpRequest.new('http://www.google.com/').get)
  multi.add(EventMachine::HttpRequest.new('http://www.yahoo.com/').get)

  multi.callback  {
    p multi.responses[:succeeded]
    p multi.responses[:failed]

    EventMachine.stop
  }
}

Basic-Auth example

EventMachine.run {
  http = EventMachine::HttpRequest.new('http://www.website.com/').get :head => {'authorization' => ['user', 'pass']}

  http.errback { failed }
  http.callback {
    p http.response_header

    EventMachine.stop
  }
}

POST example

EventMachine.run {
  http1 = EventMachine::HttpRequest.new('http://www.website.com/').post :body => {"key1" => 1, "key2" => [2,3]}
  http2 = EventMachine::HttpRequest.new('http://www.website.com/').post :body => "some data"

  # ...
}

Streaming body processing

EventMachine.run {
  http = EventMachine::HttpRequest.new('http://www.website.com/').get
  http.stream { |chunk| print chunk }

  # ...
}
Something went wrong with that request. Please try again.