ez_http 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,205 @@
1
+ #ruby lib
2
+ require "net/http"
3
+ require "uri"
4
+ require "openssl"
5
+
6
+ #gem
7
+ require "json"
8
+
9
+ # A wrapper for ruby net/http, supports http/https, RESTful methods, headers, certificate
10
+ # @author Tianyu Huang [tianhsky@yahoo.com]
11
+ #
12
+ module EZHttp
13
+
14
+ # Send http request to specified url and return responses
15
+ # @param [String] url: to send request to
16
+ # @param [Hash/String] data: hash to send or encoded query string or stringified hash
17
+ # @param [String] method: choose from "get"/"post"/"delete"/"put", if nil default is "post"
18
+ # @param [String] content_type: ie."application/json"
19
+ # @param [Array[String]] headers: is an array of Strings, ie.["encoded_key:encoded_value","content-type:application/json"];
20
+ # @param [String] cert_path: to the certificate file, don't specify or set nil if none
21
+ # @return [Net::HTTPResponse] response from remote server, example to access its fields: response.body
22
+ #
23
+ def self.Send(url, data=nil, method=nil, content_type=nil, headers=nil, cert_path=nil)
24
+
25
+ begin
26
+ # Parse url
27
+ url.strip!
28
+ uri = URI.parse(url)
29
+ http = Net::HTTP.new(uri.host, uri.port)
30
+ if (url.match(/^https/))
31
+ http.use_ssl = true
32
+ end
33
+
34
+ # Create request
35
+ request_method = data.nil? ? "get" : "post"
36
+ request_method = method || request_method
37
+ request_method.strip!
38
+ request_method.downcase!
39
+ case request_method
40
+ when "post"
41
+ request = Net::HTTP::Post.new(uri.request_uri)
42
+ when "get"
43
+ request = Net::HTTP::Get.new(uri.request_uri)
44
+ when "put"
45
+ request = Net::HTTP::Put.new(uri.request_uri)
46
+ when "delete"
47
+ request = Net::HTTP::Delete.new(uri.request_uri)
48
+ else
49
+ request = Net::HTTP::Post.new(uri.request_uri)
50
+ end
51
+ rescue
52
+ throw "Error in creating request"
53
+ end
54
+
55
+
56
+ # Set content-type
57
+ request["content-type"] = content_type.strip! unless content_type.nil?
58
+
59
+
60
+ # Set data (can be json or encoded query string)
61
+ begin
62
+ unless (data.nil?)
63
+ if (data.class.to_s == "Hash" || data.respond_to?("merge"))
64
+ request.body = data.to_json
65
+ request["content-type"] = "application/json" if request["content-type"].nil?
66
+ else
67
+ if (data.include?("{") && data.include?("}"))
68
+ request["content-type"] = "application/json" if request["content-type"].nil?
69
+ end
70
+ request.body = data.strip
71
+ #request["content-type"] = "application/x-www-form-urlencoded" if request["content-type"].nil?
72
+ end
73
+ end
74
+ rescue
75
+ throw "Error in parsing data"
76
+ end
77
+
78
+
79
+ # Set headers
80
+ begin
81
+ unless (headers.nil?)
82
+ headers.each do |header|
83
+ key = header.split(':')[0]
84
+ value = header.split(':')[1]
85
+ request[key.strip.downcase] = value.strip
86
+ end
87
+ end
88
+ rescue
89
+ throw "Error in parsing headers"
90
+ end
91
+
92
+
93
+ # Add cert if any
94
+ begin
95
+ if (cert_path.nil?)
96
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
97
+ else
98
+ http.use_ssl = true
99
+ pem = File.read(cert_path)
100
+ http.cert = OpenSSL::X509::Certificate.new(pem)
101
+ http.key = OpenSSL::PKey::RSA.new(pem)
102
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
103
+ end
104
+ rescue
105
+ throw "Error in creating certificate"
106
+ end
107
+
108
+ # Send request and return response
109
+ response = http.request(request)
110
+
111
+ end
112
+
113
+
114
+ def self.Post(url, data=nil, content_type=nil, headers=nil, cert_path=nil)
115
+ self.Send(url, data, "post", content_type, headers, cert_path)
116
+ end
117
+
118
+ def self.Get(url, data=nil, content_type=nil, headers=nil, cert_path=nil)
119
+ self.Send(url, data, "get", content_type, headers, cert_path)
120
+ end
121
+
122
+ def self.Put(url, data=nil, content_type=nil, headers=nil, cert_path=nil)
123
+ self.Send(url, data, "put", content_type, headers, cert_path)
124
+ end
125
+
126
+ def self.Delete(url, data=nil, content_type=nil, headers=nil, cert_path=nil)
127
+ self.Send(url, data, "delete", content_type, headers, cert_path)
128
+ end
129
+
130
+ # Upload files
131
+ # @param [String] url: server to upload
132
+ # @param [Hash] files: [{"name","content"}]
133
+ # @param [Array[String]] headers: is an array of Strings, ie.["authorization:Basic twwtws33vsfesfsd=="];
134
+ #
135
+ def self.Upload(url, files, headers=nil, cert_path=nil)
136
+
137
+ begin
138
+ # Parse url
139
+ url.strip!
140
+ uri = URI.parse(url)
141
+ http = Net::HTTP.new(uri.host, uri.port)
142
+ if (url.match(/^https/))
143
+ http.use_ssl = true
144
+ end
145
+
146
+ # Create request
147
+ request = Net::HTTP::Post.new(uri.request_uri)
148
+ rescue
149
+ throw "Error in creating request"
150
+ end
151
+
152
+ # Set headers
153
+ begin
154
+ unless (headers.nil?)
155
+ headers.each do |header|
156
+ key = header.split(':')[0]
157
+ value = header.split(':')[1]
158
+ request[key.strip.downcase] = value.strip
159
+ end
160
+ end
161
+ rescue
162
+ throw "Error in parsing headers"
163
+ end
164
+
165
+ # Create files
166
+ boundry = "--content--boundry--keybegin--AaB03sfwegSFSWxGBgSBsFDYcRcRMi--keyend--"
167
+ post_body = []
168
+
169
+ if (!files.nil? && files.length > 0)
170
+ files.each_with_index do |file, i|
171
+ post_body << "--#{boundry}\r\n"
172
+ post_body << "content-disposition: form-data; name=\"upload[file#{i}]\"; filename=\"#{file["name"]}\"\r\n"
173
+ post_body << "content-type: application/octet-stream\r\n"
174
+ post_body << "\r\n"
175
+ post_body << file["content"] + "\r\n"
176
+ end
177
+ post_body << "--#{boundry}--\r\n"
178
+
179
+ request.body = post_body.join
180
+ end
181
+
182
+ # Set content type
183
+ request["content-type"] = "multipart/form-data, boundary=#{boundry}"
184
+
185
+ # Add cert if any
186
+ begin
187
+ if (cert_path.nil?)
188
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
189
+ else
190
+ http.use_ssl = true
191
+ pem = File.read(cert_path)
192
+ http.cert = OpenSSL::X509::Certificate.new(pem)
193
+ http.key = OpenSSL::PKey::RSA.new(pem)
194
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
195
+ end
196
+ rescue
197
+ throw "Error in creating certificate"
198
+ end
199
+
200
+ # Send request and return response
201
+ response = http.request(request)
202
+ end
203
+
204
+ end
205
+
@@ -0,0 +1,3 @@
1
+ module EZHttp
2
+ VERSION = "1.0.4" unless defined?(::EZHttp::VERSION)
3
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ez_http
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,30 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-11 00:00:00.000000000 Z
13
- dependencies: []
14
- description: A wrapper for ruby net/http, supports http/https, RESTful methods, certificate.
12
+ date: 2012-04-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: json
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.6.6
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.6.6
30
+ description: A wrapper for ruby net/http, supports http/https, RESTful methods, headers,
31
+ certificate and file uploads
15
32
  email:
16
33
  - tianhsky@yahoo.com
17
- executables: []
34
+ executables:
35
+ - ezhttp
18
36
  extensions: []
19
37
  extra_rdoc_files:
20
38
  - README.md
@@ -23,6 +41,7 @@ files:
23
41
  - .gitignore
24
42
  - LICENSE
25
43
  - README.md
44
+ - bin/ezhttp
26
45
  - doc/EZHttp.html
27
46
  - doc/_index.html
28
47
  - doc/class_list.html
@@ -40,6 +59,8 @@ files:
40
59
  - doc/top-level-namespace.html
41
60
  - ez_http.gemspec
42
61
  - lib/ez_http.rb
62
+ - lib/ez_http/core.rb
63
+ - lib/ez_http/version.rb
43
64
  homepage: http://rubygems.org/gems/ez_http
44
65
  licenses: []
45
66
  post_install_message:
@@ -60,9 +81,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
60
81
  version: '0'
61
82
  requirements: []
62
83
  rubyforge_project:
63
- rubygems_version: 1.8.17
84
+ rubygems_version: 1.8.22
64
85
  signing_key:
65
86
  specification_version: 3
66
- summary: Make http/https request easier
87
+ summary: Make http/https requests easier
67
88
  test_files: []
68
89
  has_rdoc: