http2 0.0.13 → 0.0.14
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/Gemfile.lock +3 -3
- data/VERSION +1 -1
- data/http2.gemspec +8 -8
- data/lib/http2.rb +52 -4
- data/spec/http2_spec.rb +1 -1
- metadata +37 -19
data/Gemfile.lock
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.14
|
data/http2.gemspec
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.0.
|
7
|
+
s.name = "http2"
|
8
|
+
s.version = "0.0.14"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kasper Johansen"]
|
12
|
-
s.date =
|
13
|
-
s.description =
|
14
|
-
s.email =
|
12
|
+
s.date = "2013-05-02"
|
13
|
+
s.description = "A lightweight framework for doing http-connections in Ruby. Supports cookies, keep-alive, compressing and much more."
|
14
|
+
s.email = "k@spernj.org"
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE.txt",
|
17
17
|
"README.rdoc"
|
@@ -33,11 +33,11 @@ Gem::Specification.new do |s|
|
|
33
33
|
"spec/http2_spec.rb",
|
34
34
|
"spec/spec_helper.rb"
|
35
35
|
]
|
36
|
-
s.homepage =
|
36
|
+
s.homepage = "http://github.com/kaspernj/http2"
|
37
37
|
s.licenses = ["MIT"]
|
38
38
|
s.require_paths = ["lib"]
|
39
|
-
s.rubygems_version =
|
40
|
-
s.summary =
|
39
|
+
s.rubygems_version = "1.8.23"
|
40
|
+
s.summary = "A lightweight framework for doing http-connections in Ruby. Supports cookies, keep-alive, compressing and much more."
|
41
41
|
|
42
42
|
if s.respond_to? :specification_version then
|
43
43
|
s.specification_version = 3
|
data/lib/http2.rb
CHANGED
@@ -26,13 +26,19 @@ class Http2
|
|
26
26
|
|
27
27
|
attr_reader :cookies, :args
|
28
28
|
|
29
|
+
VALID_ARGUMENTS_INITIALIZE = [:host, :port, :ssl, :nl, :user_agent, :raise_errors, :follow_redirects, :debug, :encoding_gzip, :autostate]
|
29
30
|
def initialize(args = {})
|
30
31
|
args = {:host => args} if args.is_a?(String)
|
31
32
|
raise "Arguments wasnt a hash." if !args.is_a?(Hash)
|
32
33
|
|
34
|
+
args.each do |key, val|
|
35
|
+
raise "Invalid key: '#{key}'." if !VALID_ARGUMENTS_INITIALIZE.include?(key)
|
36
|
+
end
|
37
|
+
|
33
38
|
@args = args
|
34
39
|
@cookies = {}
|
35
40
|
@debug = @args[:debug]
|
41
|
+
@autostate_values = {} if @args[:autostate]
|
36
42
|
|
37
43
|
require "monitor"
|
38
44
|
@mutex = Monitor.new
|
@@ -57,6 +63,12 @@ class Http2
|
|
57
63
|
@uagent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
|
58
64
|
end
|
59
65
|
|
66
|
+
if !@args.key?(:raise_errors) or @args[:raise_errors]
|
67
|
+
@raise_errors = true
|
68
|
+
else
|
69
|
+
@raise_errors = false
|
70
|
+
end
|
71
|
+
|
60
72
|
raise "No host was given." if !@args[:host]
|
61
73
|
self.reconnect
|
62
74
|
|
@@ -303,16 +315,23 @@ class Http2
|
|
303
315
|
return praw
|
304
316
|
end
|
305
317
|
|
318
|
+
VALID_ARGUMENTS_POST = [:post, :url]
|
306
319
|
#Posts to a certain page.
|
307
320
|
#===Examples
|
308
321
|
# res = http.post("login.php", {"username" => "John Doe", "password" => 123)
|
309
322
|
def post(args)
|
323
|
+
args.each do |key, val|
|
324
|
+
raise "Invalid key: '#{key}'." if !VALID_ARGUMENTS_POST.include?(key)
|
325
|
+
end
|
326
|
+
|
310
327
|
args = self.parse_args(args)
|
328
|
+
phash = args[:post] ? args[:post].clone : {}
|
329
|
+
autostate_set_on_post_hash(phash) if @args[:autostate]
|
311
330
|
|
312
331
|
@mutex.synchronize do
|
313
332
|
print "Doing post.\n" if @debug
|
314
333
|
|
315
|
-
praw = Http2.post_convert_data(
|
334
|
+
praw = Http2.post_convert_data(phash)
|
316
335
|
|
317
336
|
header_str = "POST /#{args[:url]} HTTP/1.1#{@nl}"
|
318
337
|
header_str << self.header_str(self.default_headers(args).merge("Content-Type" => "application/x-www-form-urlencoded", "Content-Length" => praw.length), args)
|
@@ -333,6 +352,9 @@ class Http2
|
|
333
352
|
def post_multipart(*args)
|
334
353
|
args = self.parse_args(*args)
|
335
354
|
|
355
|
+
phash = args[:post].clone
|
356
|
+
autostate_set_on_post_hash(phash) if @args[:autostate]
|
357
|
+
|
336
358
|
#Generate random string.
|
337
359
|
boundary = rand(36**50).to_s(36)
|
338
360
|
|
@@ -340,7 +362,7 @@ class Http2
|
|
340
362
|
require "tempfile"
|
341
363
|
|
342
364
|
Tempfile.open("http2_post_multipart_tmp_#{boundary}") do |praw|
|
343
|
-
|
365
|
+
phash.each do |key, val|
|
344
366
|
praw << "--#{boundary}#{@nl}"
|
345
367
|
|
346
368
|
if val.class.name.to_s == "Tempfile" and val.respond_to?(:original_filename)
|
@@ -565,15 +587,17 @@ class Http2
|
|
565
587
|
http = Http2.new(args)
|
566
588
|
return http.get(url)
|
567
589
|
end
|
568
|
-
elsif resp.args[:code].
|
590
|
+
elsif @raise_errors and resp.args[:code].to_i == 500
|
569
591
|
err = Http2::Errors::Internalserver.new(resp.body)
|
570
592
|
err.response = resp
|
571
593
|
raise err
|
572
|
-
elsif resp.args[:code].
|
594
|
+
elsif @raise_errors and resp.args[:code].to_i == 403
|
573
595
|
err = Http2::Errors::Noaccess.new(resp.body)
|
574
596
|
err.response = resp
|
575
597
|
raise err
|
576
598
|
else
|
599
|
+
autostate_register(resp) if @args[:autostate]
|
600
|
+
|
577
601
|
return resp
|
578
602
|
end
|
579
603
|
end
|
@@ -666,4 +690,28 @@ class Http2
|
|
666
690
|
raise "Dont know how to read HTTP version: '#{@resp.args[:http_version]}'."
|
667
691
|
end
|
668
692
|
end
|
693
|
+
|
694
|
+
private
|
695
|
+
|
696
|
+
#Registers the states from a result.
|
697
|
+
def autostate_register(res)
|
698
|
+
puts "Http2: Running autostate-register on result." if @debug
|
699
|
+
@autostate_values.clear
|
700
|
+
|
701
|
+
res.body.to_s.scan(/<input type="hidden" name="__(EVENTTARGET|EVENTARGUMENT|VIEWSTATE|LASTFOCUS)" id="(.*?)" value="(.*?)" \/>/) do |match|
|
702
|
+
name = "__#{match[0]}"
|
703
|
+
id = match[1]
|
704
|
+
value = match[2]
|
705
|
+
|
706
|
+
puts "Http2: Registered autostate-value with name '#{name}' and value '#{value}'." if @debug
|
707
|
+
@autostate_values[name] = Http2::Utils.urldec(value)
|
708
|
+
end
|
709
|
+
|
710
|
+
raise "No states could be found." if @autostate_values.empty?
|
711
|
+
end
|
712
|
+
|
713
|
+
#Sets the states on the given post-hash.
|
714
|
+
def autostate_set_on_post_hash(phash)
|
715
|
+
phash.merge!(@autostate_values)
|
716
|
+
end
|
669
717
|
end
|
data/spec/http2_spec.rb
CHANGED
@@ -108,6 +108,6 @@ describe "Http2" do
|
|
108
108
|
|
109
109
|
it "should be able to convert URL's to 'is.gd'-short-urls" do
|
110
110
|
isgd = Http2.isgdlink("https://github.com/kaspernj/http2")
|
111
|
-
raise "Expected isgd-var to be
|
111
|
+
raise "Expected isgd-var to be valid but it wasnt: '#{isgd}'." if !isgd.match(/^http:\/\/is\.gd\/([A-z\d]+)$/)
|
112
112
|
end
|
113
113
|
end
|
metadata
CHANGED
@@ -1,61 +1,80 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: http2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.13
|
5
4
|
prerelease:
|
5
|
+
version: 0.0.14
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Kasper Johansen
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
13
|
-
default_executable:
|
12
|
+
date: 2013-05-02 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
|
-
|
17
|
-
requirement: &21138800 !ruby/object:Gem::Requirement
|
15
|
+
version_requirements: !ruby/object:Gem::Requirement
|
18
16
|
none: false
|
19
17
|
requirements:
|
20
18
|
- - ~>
|
21
19
|
- !ruby/object:Gem::Version
|
22
20
|
version: 2.8.0
|
21
|
+
name: rspec
|
23
22
|
type: :development
|
24
23
|
prerelease: false
|
25
|
-
|
24
|
+
requirement: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 2.8.0
|
26
30
|
- !ruby/object:Gem::Dependency
|
27
|
-
|
28
|
-
requirement: &21138280 !ruby/object:Gem::Requirement
|
31
|
+
version_requirements: !ruby/object:Gem::Requirement
|
29
32
|
none: false
|
30
33
|
requirements:
|
31
34
|
- - ~>
|
32
35
|
- !ruby/object:Gem::Version
|
33
36
|
version: '3.12'
|
37
|
+
name: rdoc
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
|
-
|
40
|
+
requirement: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '3.12'
|
37
46
|
- !ruby/object:Gem::Dependency
|
38
|
-
|
39
|
-
requirement: &21135240 !ruby/object:Gem::Requirement
|
47
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
48
|
none: false
|
41
49
|
requirements:
|
42
50
|
- - ! '>='
|
43
51
|
- !ruby/object:Gem::Version
|
44
52
|
version: 1.0.0
|
53
|
+
name: bundler
|
45
54
|
type: :development
|
46
55
|
prerelease: false
|
47
|
-
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.0.0
|
48
62
|
- !ruby/object:Gem::Dependency
|
49
|
-
|
50
|
-
requirement: &21134660 !ruby/object:Gem::Requirement
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
64
|
none: false
|
52
65
|
requirements:
|
53
66
|
- - ~>
|
54
67
|
- !ruby/object:Gem::Version
|
55
68
|
version: 1.8.4
|
69
|
+
name: jeweler
|
56
70
|
type: :development
|
57
71
|
prerelease: false
|
58
|
-
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.8.4
|
59
78
|
description: A lightweight framework for doing http-connections in Ruby. Supports
|
60
79
|
cookies, keep-alive, compressing and much more.
|
61
80
|
email: k@spernj.org
|
@@ -80,7 +99,6 @@ files:
|
|
80
99
|
- lib/http2.rb
|
81
100
|
- spec/http2_spec.rb
|
82
101
|
- spec/spec_helper.rb
|
83
|
-
has_rdoc: true
|
84
102
|
homepage: http://github.com/kaspernj/http2
|
85
103
|
licenses:
|
86
104
|
- MIT
|
@@ -93,10 +111,10 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
93
111
|
requirements:
|
94
112
|
- - ! '>='
|
95
113
|
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
114
|
segments:
|
98
115
|
- 0
|
99
|
-
hash:
|
116
|
+
hash: 2678064752276625690
|
117
|
+
version: '0'
|
100
118
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
119
|
none: false
|
102
120
|
requirements:
|
@@ -105,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
123
|
version: '0'
|
106
124
|
requirements: []
|
107
125
|
rubyforge_project:
|
108
|
-
rubygems_version: 1.
|
126
|
+
rubygems_version: 1.8.23
|
109
127
|
signing_key:
|
110
128
|
specification_version: 3
|
111
129
|
summary: A lightweight framework for doing http-connections in Ruby. Supports cookies,
|