tmm1-em-http-request 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +51 -0
- data/Rakefile +12 -4
- data/ext/buffer/em_buffer.c +6 -1
- data/lib/em-http.rb +6 -5
- data/lib/em-http/client.rb +6 -2
- data/test/test_request.rb +14 -1
- metadata +3 -3
- data/README +0 -36
data/README.rdoc
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
= EM-HTTP-Client
|
2
|
+
|
3
|
+
EventMachine based HTTP Request interface. Supports streaming response processing, uses Ragel HTTP parser.
|
4
|
+
- Simple interface for single & parallel requests via deferred callbacks
|
5
|
+
- Automatic gzip & deflate decoding
|
6
|
+
- Basic-Auth support
|
7
|
+
|
8
|
+
== Simple client example
|
9
|
+
|
10
|
+
EventMachine.run {
|
11
|
+
http = EventMachine::HttpRequest.new('http://127.0.0.1/').get :query => {'keyname' => 'value'}
|
12
|
+
|
13
|
+
http.callback {
|
14
|
+
p http.response_header.status
|
15
|
+
p http.response_header
|
16
|
+
p http.response
|
17
|
+
|
18
|
+
EventMachine.stop
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
== Multi request example
|
23
|
+
|
24
|
+
EventMachine.run {
|
25
|
+
multi = EventMachine::MultiRequest.new
|
26
|
+
|
27
|
+
# add multiple requests to the multi-handler
|
28
|
+
multi.add(EventMachine::HttpRequest.new('http://www.google.com/').get)
|
29
|
+
multi.add(EventMachine::HttpRequest.new('http://www.yahoo.com/').get)
|
30
|
+
|
31
|
+
multi.callback {
|
32
|
+
p multi.responses[:succeeded]
|
33
|
+
p multi.responses[:failed]
|
34
|
+
|
35
|
+
EventMachine.stop
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
== Basic-Auth example
|
40
|
+
|
41
|
+
EventMachine.run {
|
42
|
+
http = EventMachine::HttpRequest.new('http://www.website.com/').get :head => {'authorization' => ['user', 'pass']}
|
43
|
+
|
44
|
+
http.errback { failed }
|
45
|
+
http.callback {
|
46
|
+
p http.response_header
|
47
|
+
|
48
|
+
EventMachine.stop
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
data/Rakefile
CHANGED
@@ -5,6 +5,13 @@ require 'rake/gempackagetask'
|
|
5
5
|
require 'fileutils'
|
6
6
|
include FileUtils
|
7
7
|
|
8
|
+
# copied from EventMachine.
|
9
|
+
MAKE = ENV['MAKE'] || if RUBY_PLATFORM =~ /mswin/ # mingw uses make.
|
10
|
+
'nmake'
|
11
|
+
else
|
12
|
+
'make'
|
13
|
+
end
|
14
|
+
|
8
15
|
# Default Rake task is compile
|
9
16
|
task :default => :compile
|
10
17
|
|
@@ -28,7 +35,7 @@ task :ragel do
|
|
28
35
|
end
|
29
36
|
|
30
37
|
def make(makedir)
|
31
|
-
Dir.chdir(makedir) { sh
|
38
|
+
Dir.chdir(makedir) { sh MAKE }
|
32
39
|
end
|
33
40
|
|
34
41
|
def extconf(dir)
|
@@ -51,13 +58,14 @@ def setup_extension(dir, extension)
|
|
51
58
|
end
|
52
59
|
|
53
60
|
desc "Builds just the #{extension} extension"
|
54
|
-
task extension.to_sym => ["#{ext}/Makefile", ext_so ]
|
55
61
|
|
56
|
-
|
62
|
+
mf = (extension + '_makefile').to_sym
|
63
|
+
|
64
|
+
task mf do |t|
|
57
65
|
extconf "#{ext}"
|
58
66
|
end
|
59
67
|
|
60
|
-
|
68
|
+
task extension.to_sym => [mf] do
|
61
69
|
make "#{ext}"
|
62
70
|
cp ext_so, "lib"
|
63
71
|
end
|
data/ext/buffer/em_buffer.c
CHANGED
@@ -11,9 +11,14 @@
|
|
11
11
|
|
12
12
|
#include <string.h>
|
13
13
|
#include <time.h>
|
14
|
-
#include <unistd.h>
|
15
14
|
#include <errno.h>
|
16
15
|
|
16
|
+
#ifndef GetReadFile
|
17
|
+
#define FPTR_TO_FD(fptr) (fptr->fd)
|
18
|
+
#else
|
19
|
+
#define FPTR_TO_FD(fptr) (fileno(GetReadFile(fptr)))
|
20
|
+
#endif
|
21
|
+
|
17
22
|
/* Default number of bytes in each node's buffer */
|
18
23
|
#define DEFAULT_NODE_SIZE 16384
|
19
24
|
|
data/lib/em-http.rb
CHANGED
@@ -8,9 +8,10 @@ require 'rubygems'
|
|
8
8
|
require 'eventmachine'
|
9
9
|
require 'zlib'
|
10
10
|
|
11
|
-
require 'http11_client'
|
12
|
-
require 'em_buffer'
|
13
11
|
|
14
|
-
require '
|
15
|
-
require '
|
16
|
-
|
12
|
+
require File.dirname(__FILE__) + '/http11_client'
|
13
|
+
require File.dirname(__FILE__) + '/em_buffer'
|
14
|
+
|
15
|
+
require File.dirname(__FILE__) + '/em-http/client'
|
16
|
+
require File.dirname(__FILE__) + '/em-http/multi'
|
17
|
+
require File.dirname(__FILE__) + '/em-http/request'
|
data/lib/em-http/client.rb
CHANGED
@@ -94,7 +94,11 @@ module EventMachine
|
|
94
94
|
|
95
95
|
def encode_query(path, query)
|
96
96
|
return path unless query
|
97
|
-
|
97
|
+
if query.kind_of? String
|
98
|
+
return "#{path}?#{query}"
|
99
|
+
else
|
100
|
+
return path + "?" + query.map { |k, v| encode_param(k, v) }.join('&')
|
101
|
+
end
|
98
102
|
end
|
99
103
|
|
100
104
|
# URL encodes query parameters:
|
@@ -234,7 +238,7 @@ module EventMachine
|
|
234
238
|
end
|
235
239
|
|
236
240
|
def unbind
|
237
|
-
(@state == :finished) ? succeed : fail
|
241
|
+
(@state == :finished) ? succeed(self) : fail
|
238
242
|
close_connection
|
239
243
|
end
|
240
244
|
|
data/test/test_request.rb
CHANGED
@@ -54,7 +54,7 @@ describe EventMachine::HttpRequest do
|
|
54
54
|
}
|
55
55
|
end
|
56
56
|
|
57
|
-
it "should
|
57
|
+
it "should build query parameters from Hash" do
|
58
58
|
EventMachine.run {
|
59
59
|
http = EventMachine::HttpRequest.new('http://127.0.0.1:8080/').get :query => {:q => 'test'}
|
60
60
|
|
@@ -67,6 +67,19 @@ describe EventMachine::HttpRequest do
|
|
67
67
|
}
|
68
68
|
end
|
69
69
|
|
70
|
+
it "should pass query parameters string" do
|
71
|
+
EventMachine.run {
|
72
|
+
http = EventMachine::HttpRequest.new('http://127.0.0.1:8080/').get :query => "q=test"
|
73
|
+
|
74
|
+
http.errback { failed }
|
75
|
+
http.callback {
|
76
|
+
http.response_header.status.should == 200
|
77
|
+
http.response.should match(/test/)
|
78
|
+
EventMachine.stop
|
79
|
+
}
|
80
|
+
}
|
81
|
+
end
|
82
|
+
|
70
83
|
it "should encode an array of query parameters" do
|
71
84
|
EventMachine.run {
|
72
85
|
http = EventMachine::HttpRequest.new('http://127.0.0.1:8080/echo_query').get :query => {:hash => ['value1', 'value2']}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tmm1-em-http-request
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ilya Grigorik
|
@@ -34,7 +34,7 @@ extra_rdoc_files: []
|
|
34
34
|
files:
|
35
35
|
- .autotest
|
36
36
|
- LICENSE
|
37
|
-
- README
|
37
|
+
- README.rdoc
|
38
38
|
- Rakefile
|
39
39
|
- ext/buffer/em_buffer.c
|
40
40
|
- ext/buffer/extconf.rb
|
@@ -73,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
73
|
version:
|
74
74
|
requirements: []
|
75
75
|
|
76
|
-
rubyforge_project:
|
76
|
+
rubyforge_project: em-http-request
|
77
77
|
rubygems_version: 1.2.0
|
78
78
|
signing_key:
|
79
79
|
specification_version: 2
|
data/README
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
EventMachine based HTTP Request interface. Supports streaming response processing / based on Zed Shaw's Ragel HTTP parser.
|
2
|
-
- Borrows a lot of good concepts from Rev's HttpClient, Curb, and other libraries.
|
3
|
-
- Offers support for single or parallel request queries & via deferred callbacks
|
4
|
-
|
5
|
-
Simple client example:
|
6
|
-
--------
|
7
|
-
|
8
|
-
EventMachine.run {
|
9
|
-
http = EventMachine::HttpRequest.new('http://127.0.0.1/').get :query => {'keyname' => 'value'}
|
10
|
-
|
11
|
-
http.callback {
|
12
|
-
p http.response_header.status
|
13
|
-
p http.response_header
|
14
|
-
p http.response
|
15
|
-
|
16
|
-
EventMachine.stop
|
17
|
-
}
|
18
|
-
}
|
19
|
-
|
20
|
-
Multi request example:
|
21
|
-
----------
|
22
|
-
|
23
|
-
EventMachine.run {
|
24
|
-
multi = EventMachine::MultiRequest.new
|
25
|
-
|
26
|
-
# add multiple requests to the multi-handler
|
27
|
-
multi.add(EventMachine::HttpRequest.new('http://www.google.com/').get)
|
28
|
-
multi.add(EventMachine::HttpRequest.new('http://www.yahoo.com/').get)
|
29
|
-
|
30
|
-
multi.callback {
|
31
|
-
p multi.responses[:succeeded]
|
32
|
-
p multi.responses[:failed]
|
33
|
-
|
34
|
-
EventMachine.stop
|
35
|
-
}
|
36
|
-
}
|