net-http-rest_client 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/net/http/rest_client.rb +139 -0
  2. metadata +45 -0
@@ -0,0 +1,139 @@
1
+ require 'timeout'
2
+ require 'net/http'
3
+
4
+ module Net
5
+ class HTTP
6
+ # Pure ruby http rest client class
7
+ class RestClient
8
+ VERSION = '0.1.0'
9
+
10
+ # Get class verion
11
+ def self.version
12
+ VERSION
13
+ end
14
+
15
+ # Main longstanding params (the same params as params at #initialize)
16
+ attr_reader :params
17
+ # Main longstanding cookies
18
+ attr_reader :cookies
19
+ # Main longstanding headers
20
+ attr_reader :headers
21
+ # Returns last Net::HTTP::Response
22
+ attr_reader :response
23
+
24
+ ##
25
+ # To create class just pass params to constructor
26
+ # Net::HTTP::RestClient.new :host => '127.0.0.1', :port => 8080
27
+ def initialize params = {}
28
+ defaults = {
29
+ :port => 80,
30
+ :user_agent => 'Net::HTTP::RestClient'
31
+ }
32
+ if params[:port]==443 && !params[:ssl]
33
+ defaults.merge! :ssl => {
34
+ :use_ssl => true,
35
+ :verify_mode => OpenSSL::SSL::VERIFY_NONE
36
+ }
37
+ end
38
+ @params = defaults.merge(params)
39
+ @cookies = {}
40
+ @headers = {}
41
+ @params[:headers] && @headers=@params[:headers]
42
+ @params[:cookies] && @cookies=@params[:cookies]
43
+ end
44
+
45
+ def clear_cookies
46
+ @cookies = {}
47
+ end
48
+
49
+ def clear_headers
50
+ @headers = {}
51
+ end
52
+
53
+ def get url, params = {}
54
+ params[:url] = url
55
+ request Net::HTTP::Get, params
56
+ end
57
+
58
+ def post url, data=nil, params = {}
59
+ params[:url] = url
60
+ params[:body] = data
61
+ request Net::HTTP::Post, params
62
+ end
63
+
64
+ def put url, data=nil, params = {}
65
+ params[:url] = url
66
+ params[:body] = data
67
+ request Net::HTTP::Put, params
68
+ end
69
+
70
+ def delete url, params = {}
71
+ params[:url] = url
72
+ request Net::HTTP::Delete, params
73
+ end
74
+
75
+ def head url, params = {}
76
+ params[:url] = url
77
+ request Net::HTTP::Head, params
78
+ end
79
+
80
+ private
81
+
82
+ def request method, params
83
+ params = { :headers => {}, :cookies => {} }.merge(params)
84
+ params = @params.merge(params)
85
+ req = method.new(params[:url])
86
+ req['User-Agent'] = params[:user_agent]
87
+ params[:body] && req.body = params[:body]
88
+ params[:virtual_host] && req['Host'] = params[:virtual_host]
89
+ params[:user] && req.basic_auth(params[:user], params[:password])
90
+ cookies = []
91
+ @cookies.merge(params[:cookies]).each do |key, value|
92
+ if value
93
+ cookies << "#{key}=#{value}"
94
+ else
95
+ cookies << "#{key}"
96
+ end
97
+ end
98
+ cookies.size>0 && req['Cookie'] = cookies.join(';')
99
+ @headers.merge(params[:headers]).each do |key, value|
100
+ req[key] = value
101
+ end
102
+ response = nil
103
+ if params[:timeout]
104
+ Timeout::timeout(params[:timeout]) do
105
+ response = execute req, params
106
+ end
107
+ else
108
+ response = execute req, params
109
+ end
110
+ @response = response
111
+ return nil unless response
112
+ if response['Set-Cookie'] && response['Set-Cookie'].size>0
113
+ parse_cookies response
114
+ end
115
+ return response.body
116
+ end
117
+
118
+ def parse_cookies response
119
+ response['Set-Cookie'].split(';').each do |pair|
120
+ data = pair.split('=')
121
+ raise 'Invalid cookie format' if data.size>2
122
+ key = data[0].strip
123
+ value = data[1] && data[1].strip
124
+ @cookies[key] = value
125
+ end
126
+ end
127
+
128
+ def execute req, params
129
+ Net::HTTP.start(
130
+ params[:host],
131
+ params[:port],
132
+ params[:ssl]
133
+ ) do |http|
134
+ http.request(req)
135
+ end
136
+ end
137
+ end
138
+ end
139
+ 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.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Promix17
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2015-03-23 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://bitbucket.org/promix17/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: []