minhttp 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +1 -1
- data/VERSION +1 -1
- data/examples/synchronous_example.rb +22 -0
- data/examples/synchronous_example.rb~ +20 -0
- data/lib/minhttp.rb +8 -2
- data/lib/minparser.rb~ +20 -0
- data/lib/rawparser.rb~ +23 -0
- metadata +11 -7
data/README.md
CHANGED
@@ -14,7 +14,7 @@ Example:
|
|
14
14
|
HTTP
|
15
15
|
|
16
16
|
EventMachine::run do
|
17
|
-
Http::Min.connect("www.
|
17
|
+
Http::Min.connect("www.google.com", data) do |raw_response, parsed_response|
|
18
18
|
puts "Received #{parsed_response.status_code} status from Google"
|
19
19
|
puts "First 100 characters of raw HTTP response:"
|
20
20
|
puts raw_response[0..100]
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.5
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative '../lib/minhttp'
|
2
|
+
require 'em-synchrony'
|
3
|
+
|
4
|
+
data = <<-HTTP
|
5
|
+
GET / HTTP/1.0\r
|
6
|
+
Host: www.google.com\r
|
7
|
+
|
8
|
+
HTTP
|
9
|
+
|
10
|
+
raw_response, parsed_response = [nil, nil]
|
11
|
+
EM.synchrony do
|
12
|
+
f = Fiber.current
|
13
|
+
Http::Min.connect("www.google.com", data) do |raw_response, parsed_response|
|
14
|
+
f.resume([raw_response, parsed_response])
|
15
|
+
end
|
16
|
+
raw_response, parsed_response = Fiber.yield
|
17
|
+
EventMachine.stop
|
18
|
+
end
|
19
|
+
|
20
|
+
puts "Received #{parsed_response.status_code} status from Google"
|
21
|
+
puts "First 100 characters of raw HTTP response:"
|
22
|
+
puts raw_response[0..100]
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative '../lib/minhttp'
|
2
|
+
require 'em-synchrony'
|
3
|
+
|
4
|
+
data = <<-HTTP
|
5
|
+
GET / HTTP/1.0\r
|
6
|
+
Host: www.google.com\r
|
7
|
+
|
8
|
+
HTTP
|
9
|
+
|
10
|
+
EventMachine::run do
|
11
|
+
Http::Min.connect("www.google.com", data) do |raw_response, parsed_response|
|
12
|
+
puts "Received #{parsed_response.status_code} status from Google"
|
13
|
+
puts "First 100 characters of raw HTTP response:"
|
14
|
+
puts raw_response[0..100]
|
15
|
+
# EM::stop
|
16
|
+
Fiber.yield
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
fiber.resume
|
data/lib/minhttp.rb
CHANGED
@@ -45,6 +45,11 @@ module Http
|
|
45
45
|
begin
|
46
46
|
@@connections += 1
|
47
47
|
@parser = Http::Parser.new
|
48
|
+
@headers_complete = false
|
49
|
+
@parser.on_headers_complete = proc do
|
50
|
+
@headers_complete = true
|
51
|
+
:stop
|
52
|
+
end
|
48
53
|
@response_data = ""
|
49
54
|
rescue Exception => e
|
50
55
|
@@logger.error("Error in post_init: #{e}")
|
@@ -57,14 +62,15 @@ module Http
|
|
57
62
|
start_tls(:verify_peer => true) if @ssl
|
58
63
|
send_data @request_data
|
59
64
|
rescue Exception => e
|
60
|
-
|
65
|
+
@@logger.error "Error in connection_completed: #{e}"
|
66
|
+
raise e
|
61
67
|
end
|
62
68
|
end
|
63
69
|
|
64
70
|
def receive_data(data)
|
65
71
|
@response_data << data
|
66
72
|
begin
|
67
|
-
@parser << data
|
73
|
+
@parser << data unless @headers_complete
|
68
74
|
rescue HTTP::Parser::Error => e
|
69
75
|
@@logger.warn "Failed to parse: #{data}"
|
70
76
|
raise e
|
data/lib/minparser.rb~
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'http/parser'
|
2
|
+
require 'eventmachine'
|
3
|
+
require 'logger'
|
4
|
+
require_relative "ssl_validator"
|
5
|
+
|
6
|
+
#
|
7
|
+
# The minimal HTTP client
|
8
|
+
# Sends a raw http request (bytes)
|
9
|
+
# Parses the response and provides both the parsed and the raw response
|
10
|
+
# Supports ssl
|
11
|
+
#
|
12
|
+
module Http
|
13
|
+
class MinParser
|
14
|
+
|
15
|
+
|
16
|
+
parser = Http::Parser.new
|
17
|
+
parser.on_headers_complete = proc{ :stop }
|
18
|
+
|
19
|
+
offset = parser << request_data
|
20
|
+
body = request_data[offset..-1]
|
data/lib/rawparser.rb~
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'http/parser'
|
2
|
+
require 'eventmachine'
|
3
|
+
require 'logger'
|
4
|
+
require_relative "ssl_validator"
|
5
|
+
|
6
|
+
#
|
7
|
+
# The minimal HTTP parser
|
8
|
+
# Simple wrapper around http_parser.rb that supplies access to the raw
|
9
|
+
#
|
10
|
+
module Http
|
11
|
+
class RawParser
|
12
|
+
def initialize
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
def <<
|
17
|
+
|
18
|
+
|
19
|
+
parser = Http::Parser.new
|
20
|
+
parser.on_headers_complete = proc{ :stop }
|
21
|
+
|
22
|
+
offset = parser << request_data
|
23
|
+
body = request_data[offset..-1]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minhttp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-05-
|
12
|
+
date: 2011-05-23 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: http_parser.rb
|
16
|
-
requirement: &
|
16
|
+
requirement: &7850840 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *7850840
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: eventmachine
|
27
|
-
requirement: &
|
27
|
+
requirement: &7850200 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *7850200
|
36
36
|
description: MinHTTP allows one to send and receive raw HTTP requests. It's a very
|
37
37
|
thin wrapper around EventMachine's connect method with some SSL validation added.
|
38
38
|
email:
|
@@ -46,9 +46,13 @@ files:
|
|
46
46
|
- Gemfile
|
47
47
|
- Rakefile
|
48
48
|
- cacert.pem
|
49
|
+
- examples/synchronous_example.rb
|
50
|
+
- examples/synchronous_example.rb~
|
49
51
|
- examples/readme_example.rb
|
50
52
|
- lib/ssl_validator.rb
|
53
|
+
- lib/minparser.rb~
|
51
54
|
- lib/minhttp.rb
|
55
|
+
- lib/rawparser.rb~
|
52
56
|
- test/simple_test.rb~
|
53
57
|
- test/simple_test.rb
|
54
58
|
homepage: http://github.com/ahfarmer/minhttp
|
@@ -71,7 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
71
75
|
version: '0'
|
72
76
|
requirements: []
|
73
77
|
rubyforge_project: minhttp
|
74
|
-
rubygems_version: 1.8.
|
78
|
+
rubygems_version: 1.8.3
|
75
79
|
signing_key:
|
76
80
|
specification_version: 3
|
77
81
|
summary: An HTTP library for the minimalist.
|