net_http-rest_client 0.0.1
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/lib/net/http/rest_client.rb +104 -0
- metadata +45 -0
@@ -0,0 +1,104 @@
|
|
1
|
+
require 'timeout'
|
2
|
+
require 'net/http'
|
3
|
+
|
4
|
+
module Net
|
5
|
+
class HTTP
|
6
|
+
class RestClient
|
7
|
+
VERSION = '0.0.1'
|
8
|
+
|
9
|
+
def self.version
|
10
|
+
VERSION
|
11
|
+
end
|
12
|
+
|
13
|
+
attr_reader :params
|
14
|
+
attr_reader :cookies
|
15
|
+
attr_reader :response
|
16
|
+
|
17
|
+
def initialize params = {}
|
18
|
+
defaults = {
|
19
|
+
:port => 80,
|
20
|
+
:user_agent => 'Net::HTTP::RestClient'
|
21
|
+
}
|
22
|
+
if params[:port]==443 && !params[:ssl]
|
23
|
+
defaults.merge! :ssl => {
|
24
|
+
:use_ssl => true,
|
25
|
+
:verify_mode => OpenSSL::SSL::VERIFY_NONE
|
26
|
+
}
|
27
|
+
end
|
28
|
+
@params = defaults.merge(params)
|
29
|
+
@cookies = {}
|
30
|
+
end
|
31
|
+
|
32
|
+
def get params = {}
|
33
|
+
request Net::HTTP::Get, params
|
34
|
+
end
|
35
|
+
|
36
|
+
def post params = {}
|
37
|
+
request Net::HTTP::Post, params
|
38
|
+
end
|
39
|
+
|
40
|
+
def put params = {}
|
41
|
+
request Net::HTTP::Put, params
|
42
|
+
end
|
43
|
+
|
44
|
+
def delete params = {}
|
45
|
+
request Net::HTTP::Delete, params
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def request method, params
|
51
|
+
params = @params.merge(params)
|
52
|
+
req = method.new(params[:url])
|
53
|
+
req['User-Agent'] = params[:user_agent]
|
54
|
+
params[:body] && req.body = params[:body]
|
55
|
+
params[:virtual_host] && req['Host'] = params[:virtual_host]
|
56
|
+
params[:user] && req.basic_auth(params[:user], params[:password])
|
57
|
+
if @cookies.size > 0
|
58
|
+
cookies = []
|
59
|
+
@cookies.each do |key, value|
|
60
|
+
cookies << "#{key}=#{value}"
|
61
|
+
end
|
62
|
+
req['Cookie'] = cookies.join(';')
|
63
|
+
end
|
64
|
+
if params[:headers]
|
65
|
+
params[:headers].each do |key, value|
|
66
|
+
req[key] = value
|
67
|
+
end
|
68
|
+
end
|
69
|
+
if params[:timeout]
|
70
|
+
Timeout::timeout(params[:timeout]) do
|
71
|
+
response = execute req, params
|
72
|
+
end
|
73
|
+
else
|
74
|
+
response = execute req, params
|
75
|
+
end
|
76
|
+
if response['Set-Cookie'] && response['Set-Cookie'].size>0
|
77
|
+
parse_cookies response
|
78
|
+
end
|
79
|
+
@response = response
|
80
|
+
return response.body
|
81
|
+
end
|
82
|
+
|
83
|
+
def parse_cookies response
|
84
|
+
response['Set-Cookie'].split(';').each do |pair|
|
85
|
+
data = pair.split('=')
|
86
|
+
raise 'Invalid cookie format' if data.size>2
|
87
|
+
key = data[0].strip
|
88
|
+
value = data[1] && data[1].strip
|
89
|
+
@cookies[key] = value
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def execute req, params
|
94
|
+
Net::HTTP.start(
|
95
|
+
params[:host],
|
96
|
+
params[:port],
|
97
|
+
params[:ssl]
|
98
|
+
) do |http|
|
99
|
+
http.request(req)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
metadata
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: net_http-rest_client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Promix17
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2015-03-10 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: Pure http rest client library
|
15
|
+
email: promix17@yandex.ru
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- ./lib/net/http/rest_client.rb
|
21
|
+
homepage: https://hardc0de.com/hg/net_http-rest_client
|
22
|
+
licenses: []
|
23
|
+
post_install_message:
|
24
|
+
rdoc_options: []
|
25
|
+
require_paths:
|
26
|
+
- lib
|
27
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
requirements: []
|
40
|
+
rubyforge_project:
|
41
|
+
rubygems_version: 1.8.23
|
42
|
+
signing_key:
|
43
|
+
specification_version: 3
|
44
|
+
summary: Pure http rest client library
|
45
|
+
test_files: []
|