http.rb 0.11.1 → 0.12.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.
- checksums.yaml +5 -5
- data/Gemfile +1 -0
- data/README.md +92 -2
- data/http.rb.gemspec +4 -4
- data/lib/HTTP/get.rb +11 -4
- data/lib/HTTP/post.rb +18 -6
- data/lib/HTTP.rb +0 -10
- data/lib/Net/HTTP/set_options.rb +16 -0
- data/spec/HTTP/get_spec.rb +44 -9
- data/spec/HTTP/post_spec.rb +80 -17
- data/spec/spec_helper.rb +0 -1
- metadata +6 -10
- data/spec/HTTP.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 64b5868b1582ef96a23021bef26cbfaa4e7ee7a63f28566e20c5f53d6ba91356
|
4
|
+
data.tar.gz: 9af58e51678e5b6ba65d55ffdca2d2382cde427fb7e2db2a5999a1e137344969
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 291e79fc695b67dde10145d69311a79c2529f9cac03a217abbbeb254920c8aa137e0220f0e3f2eba3d46b482757a5c1777197fb4dc758dc0adb67918039a5924
|
7
|
+
data.tar.gz: ec2e4b6caf7878518de41ceec6881ebb957dfcca50bc9e3aaa4295b9893ff825459e374c3ebaaf22c6ec1eadb9c6e762459d833f71fbe71397c6b91fb44a217c
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -19,7 +19,7 @@ Perhaps someone will appreciate its relative simplicity, since it is much smalle
|
|
19
19
|
|
20
20
|
Add this line to your application's Gemfile:
|
21
21
|
|
22
|
-
gem '
|
22
|
+
gem 'http.rb'
|
23
23
|
|
24
24
|
And then execute:
|
25
25
|
|
@@ -27,7 +27,7 @@ And then execute:
|
|
27
27
|
|
28
28
|
Or install it yourself as:
|
29
29
|
|
30
|
-
$ gem install
|
30
|
+
$ gem install http.rb
|
31
31
|
|
32
32
|
|
33
33
|
## Usage
|
@@ -43,6 +43,10 @@ HTTP.post('http://example.com') # Admittedly doing a POST without providing form
|
|
43
43
|
HTTP.get('http://example.com', {a: 1, b: 2})
|
44
44
|
HTTP.post('http://example.com', {a: 1, b: 2})
|
45
45
|
|
46
|
+
# With JSON data
|
47
|
+
|
48
|
+
HTTP.post('http://example.com', {a: 1, b: 2}, {'Content-type' => 'application/json'})
|
49
|
+
|
46
50
|
# With custom headers only
|
47
51
|
|
48
52
|
HTTP.get('http://example.com', {}, {'User-Agent'=>'Custom'})
|
@@ -89,6 +93,92 @@ end
|
|
89
93
|
|
90
94
|
```
|
91
95
|
|
96
|
+
## Allowed values for the options hash (which passes through to Net::HTTP)
|
97
|
+
```Ruby
|
98
|
+
ca_file
|
99
|
+
# Sets path of a CA certification file in PEM format.
|
100
|
+
#
|
101
|
+
# The file can contain several CA certificates.
|
102
|
+
|
103
|
+
ca_path
|
104
|
+
# Sets path of a CA certification directory containing certifications in
|
105
|
+
# PEM format.
|
106
|
+
|
107
|
+
cert
|
108
|
+
# Sets an OpenSSL::X509::Certificate object as client certificate.
|
109
|
+
# (This method is appeared in Michal Rokos's OpenSSL extension).
|
110
|
+
|
111
|
+
cert_store
|
112
|
+
# Sets the X509::Store to verify peer certificate.
|
113
|
+
|
114
|
+
ciphers
|
115
|
+
# Sets the available ciphers. See OpenSSL::SSL::SSLContext#ciphers=
|
116
|
+
|
117
|
+
close_on_empty_response
|
118
|
+
|
119
|
+
continue_timeout
|
120
|
+
# Number of seconds to wait for one block to be read (via one read(2)
|
121
|
+
# call). Any number may be used, including Floats for fractional
|
122
|
+
# seconds. If the HTTP object cannot read data in this many seconds,
|
123
|
+
# it raises a Net::ReadTimeout exception. The default value is 60 seconds.
|
124
|
+
|
125
|
+
keep_alive_timeout
|
126
|
+
# Seconds to reuse the connection of the previous request.
|
127
|
+
# If the idle time is less than this Keep-Alive Timeout,
|
128
|
+
# Net::HTTP reuses the TCP/IP socket used by the previous communication.
|
129
|
+
# The default value is 2 seconds.
|
130
|
+
|
131
|
+
key
|
132
|
+
# Sets an OpenSSL::PKey::RSA or OpenSSL::PKey::DSA object.
|
133
|
+
# (This method is appeared in Michal Rokos's OpenSSL extension.)
|
134
|
+
|
135
|
+
local_host
|
136
|
+
# The local host used to establish the connection.
|
137
|
+
|
138
|
+
local_port
|
139
|
+
# The local port used to establish the connection.
|
140
|
+
|
141
|
+
open_timeout
|
142
|
+
# Number of seconds to wait for the connection to open. Any number
|
143
|
+
# may be used, including Floats for fractional seconds. If the HTTP
|
144
|
+
# object cannot open a connection in this many seconds, it raises a
|
145
|
+
# Net::OpenTimeout exception. The default value is 60 seconds.
|
146
|
+
|
147
|
+
proxy_address
|
148
|
+
proxy_from_env
|
149
|
+
proxy_pass
|
150
|
+
proxy_port
|
151
|
+
proxy_user
|
152
|
+
|
153
|
+
read_timeout
|
154
|
+
# Seconds to wait for 100 Continue response. If the HTTP object does not
|
155
|
+
# receive a response in this many seconds it sends the request body. The
|
156
|
+
# default value is +nil+.
|
157
|
+
|
158
|
+
ssl_timeout
|
159
|
+
# Sets the SSL timeout seconds.
|
160
|
+
|
161
|
+
ssl_version
|
162
|
+
# Sets the SSL version. See OpenSSL::SSL::SSLContext#ssl_version=
|
163
|
+
|
164
|
+
use_ssl
|
165
|
+
# Turn on/off SSL.
|
166
|
+
# This flag must be set before starting session.
|
167
|
+
# If you change use_ssl value after session started,
|
168
|
+
# a Net::HTTP object raises IOError.
|
169
|
+
|
170
|
+
verify_callback
|
171
|
+
# Sets the verify callback for the server certification verification.
|
172
|
+
|
173
|
+
verify_depth
|
174
|
+
# Sets the maximum depth for the certificate chain verification.
|
175
|
+
|
176
|
+
verify_mode
|
177
|
+
# Sets the flags for server the certification verification at beginning of
|
178
|
+
# SSL/TLS session.
|
179
|
+
#
|
180
|
+
# OpenSSL::SSL::VERIFY_NONE or OpenSSL::SSL::VERIFY_PEER are acceptable.
|
181
|
+
```
|
92
182
|
|
93
183
|
## Contributing
|
94
184
|
|
data/http.rb.gemspec
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
|
-
s.name = 'http.rb'
|
3
|
-
s.version = '0.
|
4
|
-
s.date = '
|
2
|
+
s.name = 'http.rb' # I would have preferred 'http', but there's a library called http.rb with the gem name of http. Confusing, eh?
|
3
|
+
s.version = '0.12.1'
|
4
|
+
s.date = '2025-02-07'
|
5
5
|
|
6
6
|
s.summary = "HTTP made easy."
|
7
7
|
s.description = "HTTP is the simplest HTTP mezzanine library for Ruby. Supply a URI, \
|
8
|
-
some optional query arguments, some optional headers, and some
|
8
|
+
some optional query arguments, some optional headers, and some \
|
9
9
|
Net::HTTP options, and that's it!"
|
10
10
|
s.author = 'thoran'
|
11
11
|
s.email = 'code@thoran.com'
|
data/lib/HTTP/get.rb
CHANGED
@@ -9,6 +9,7 @@ lib_dir = File.expand_path(File.join(__FILE__, '..', '..'))
|
|
9
9
|
$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
|
10
10
|
|
11
11
|
require 'Hash/x_www_form_urlencode'
|
12
|
+
require 'Net/HTTP/set_options'
|
12
13
|
require 'Net/HTTP/Get/set_headers'
|
13
14
|
require 'URI/Generic/use_sslQ'
|
14
15
|
|
@@ -17,15 +18,21 @@ module HTTP
|
|
17
18
|
def get(uri, args = {}, headers = {}, options = {}, &block)
|
18
19
|
uri = uri.is_a?(URI) ? uri : URI.parse(uri)
|
19
20
|
http = Net::HTTP.new(uri.host, uri.port)
|
20
|
-
|
21
|
-
|
22
|
-
options
|
21
|
+
options[:use_ssl] ||= uri.use_ssl?
|
22
|
+
options[:verify_mode] ||= OpenSSL::SSL::VERIFY_NONE
|
23
|
+
http.options = options
|
23
24
|
request_object = Net::HTTP::Get.new(uri.request_uri + '?' + args.x_www_form_urlencode)
|
24
25
|
request_object.headers = headers
|
25
26
|
request_object.basic_auth(uri.user, uri.password) if uri.user
|
26
27
|
response = http.request(request_object)
|
27
28
|
if response.code =~ /^3/
|
28
|
-
|
29
|
+
redirect_uri = URI.parse(response.header['location'])
|
30
|
+
if redirect_uri.scheme
|
31
|
+
response = get(response.header['location'], {}, {}, options, &block)
|
32
|
+
else
|
33
|
+
new_location = "http://#{uri.host}:#{uri.port}#{response.header['location']}"
|
34
|
+
response = get(new_location, {}, {}, options, &block)
|
35
|
+
end
|
29
36
|
end
|
30
37
|
if block_given?
|
31
38
|
yield response
|
data/lib/HTTP/post.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# HTTP/post.rb
|
2
2
|
# HTTP.post
|
3
3
|
|
4
|
+
require 'json'
|
4
5
|
require 'net/http'
|
5
6
|
require 'openssl'
|
6
7
|
require 'uri'
|
@@ -9,24 +10,35 @@ lib_dir = File.expand_path(File.join(__FILE__, '..', '..'))
|
|
9
10
|
$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
|
10
11
|
|
11
12
|
require 'HTTP/get'
|
13
|
+
require 'Net/HTTP/set_options'
|
12
14
|
require 'Net/HTTP/Post/set_headers'
|
13
15
|
require 'URI/Generic/use_sslQ'
|
14
16
|
|
15
17
|
module HTTP
|
16
18
|
|
17
|
-
def post(uri,
|
19
|
+
def post(uri, data = {}, headers = {}, options = {}, &block)
|
18
20
|
uri = uri.is_a?(URI) ? uri : URI.parse(uri)
|
19
21
|
http = Net::HTTP.new(uri.host, uri.port)
|
20
|
-
|
21
|
-
|
22
|
-
options
|
22
|
+
options[:use_ssl] ||= uri.use_ssl?
|
23
|
+
options[:verify_mode] ||= OpenSSL::SSL::VERIFY_NONE
|
24
|
+
http.options = options
|
23
25
|
request_object = Net::HTTP::Post.new(uri.request_uri)
|
24
|
-
|
26
|
+
if headers['Content-Type'] == 'application/json'
|
27
|
+
request_object.body = JSON.dump(data)
|
28
|
+
else
|
29
|
+
request_object.form_data = data
|
30
|
+
end
|
25
31
|
request_object.headers = headers
|
26
32
|
request_object.basic_auth(uri.user, uri.password) if uri.user
|
27
33
|
response = http.request(request_object)
|
28
34
|
if response.code =~ /^3/
|
29
|
-
|
35
|
+
redirect_uri = URI.parse(response.header['location'])
|
36
|
+
if redirect_uri.scheme
|
37
|
+
response = get(response.header['location'], {}, {}, options, &block)
|
38
|
+
else
|
39
|
+
new_location = "http://#{uri.host}:#{uri.port}#{response.header['location']}"
|
40
|
+
response = get(new_location, {}, {}, options, &block)
|
41
|
+
end
|
30
42
|
end
|
31
43
|
if block_given?
|
32
44
|
yield response
|
data/lib/HTTP.rb
CHANGED
@@ -1,16 +1,6 @@
|
|
1
1
|
# HTTP.rb
|
2
2
|
# HTTP
|
3
3
|
|
4
|
-
# 20150518
|
5
|
-
# 0.11.1
|
6
|
-
|
7
|
-
# Changes since 0.10:
|
8
|
-
# 1. Removed HTTP/write.rb, since I wanted to reimplement it using standard File methods and not my custom written File.write. It may stay gone, but I'm not sure yet...
|
9
|
-
# 2. + HTTP.gemspec
|
10
|
-
# 3. + README.md
|
11
|
-
# 0/1
|
12
|
-
# 4. + String/url_encode, which was left out previously.
|
13
|
-
|
14
4
|
lib_dir = File.expand_path(File.join(__FILE__, '..'))
|
15
5
|
$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
|
16
6
|
|
data/spec/HTTP/get_spec.rb
CHANGED
@@ -6,11 +6,7 @@ $LOAD_PATH.unshift(spec_dir) unless $LOAD_PATH.include?(spec_dir)
|
|
6
6
|
require 'spec_helper'
|
7
7
|
require 'HTTP/get'
|
8
8
|
|
9
|
-
WebMock.enable!
|
10
|
-
WebMock.disable_net_connect!(allow_localhost: true)
|
11
|
-
|
12
9
|
describe ".get" do
|
13
|
-
|
14
10
|
context "with uri-only supplied" do
|
15
11
|
before do
|
16
12
|
stub_request(:get, 'http://example.com/path').
|
@@ -144,12 +140,12 @@ describe ".get" do
|
|
144
140
|
before do
|
145
141
|
stub_request(:get, request_uri).
|
146
142
|
with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
147
|
-
to_return(status:
|
143
|
+
to_return(status: 301, body: '', headers: {'location' => redirect_uri})
|
148
144
|
end
|
149
145
|
|
150
146
|
it "does a redirect" do
|
151
147
|
expect(HTTP).to receive(:get).once.with(request_uri).and_call_original
|
152
|
-
expect(HTTP).to receive(:get).once.with(redirect_uri, {}, {}, {})
|
148
|
+
expect(HTTP).to receive(:get).once.with(redirect_uri, {}, {}, {use_ssl: false, verify_mode: 0})
|
153
149
|
HTTP.get(request_uri)
|
154
150
|
end
|
155
151
|
end
|
@@ -158,15 +154,54 @@ describe ".get" do
|
|
158
154
|
before do
|
159
155
|
stub_request(:get, request_uri).
|
160
156
|
with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
161
|
-
to_return(status:
|
157
|
+
to_return(status: 302, body: '', headers: {'location' => redirect_uri})
|
162
158
|
end
|
163
159
|
|
164
160
|
it "does a redirect" do
|
165
|
-
expect(HTTP).to receive(:get).with(request_uri).and_call_original
|
166
|
-
expect(HTTP).to receive(:get).with(redirect_uri, {}, {}, {})
|
161
|
+
expect(HTTP).to receive(:get).once.with(request_uri).and_call_original
|
162
|
+
expect(HTTP).to receive(:get).once.with(redirect_uri, {}, {}, {use_ssl: false, verify_mode: 0})
|
167
163
|
HTTP.get(request_uri)
|
168
164
|
end
|
169
165
|
end
|
170
166
|
end
|
171
167
|
|
168
|
+
context "with path only redirection" do
|
169
|
+
let(:request_uri){'http://example.com/path'}
|
170
|
+
let(:redirect_path){'/new_path'}
|
171
|
+
let(:redirect_uri){"http://example.com:80#{redirect_path}"}
|
172
|
+
|
173
|
+
before do
|
174
|
+
stub_request(:get, redirect_uri).
|
175
|
+
with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
176
|
+
to_return(status: 200, body: '', headers: {})
|
177
|
+
end
|
178
|
+
|
179
|
+
context "via 301" do
|
180
|
+
before do
|
181
|
+
stub_request(:get, request_uri).
|
182
|
+
with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
183
|
+
to_return(status: 301, body: '', headers: {'location' => redirect_path})
|
184
|
+
end
|
185
|
+
|
186
|
+
it "does a redirect" do
|
187
|
+
expect(HTTP).to receive(:get).once.with(request_uri).and_call_original
|
188
|
+
expect(HTTP).to receive(:get).once.with(redirect_uri, {}, {}, {use_ssl: false, verify_mode: 0})
|
189
|
+
HTTP.get(request_uri)
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
context "via 302" do
|
194
|
+
before do
|
195
|
+
stub_request(:get, request_uri).
|
196
|
+
with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
197
|
+
to_return(status: 302, body: '', headers: {'location' => redirect_path})
|
198
|
+
end
|
199
|
+
|
200
|
+
it "does a redirect" do
|
201
|
+
expect(HTTP).to receive(:get).once.with(request_uri).and_call_original
|
202
|
+
expect(HTTP).to receive(:get).once.with(redirect_uri, {}, {}, {use_ssl: false, verify_mode: 0})
|
203
|
+
HTTP.get(request_uri)
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
172
207
|
end
|
data/spec/HTTP/post_spec.rb
CHANGED
@@ -6,15 +6,11 @@ $LOAD_PATH.unshift(spec_dir) unless $LOAD_PATH.include?(spec_dir)
|
|
6
6
|
require 'spec_helper'
|
7
7
|
require 'HTTP/post'
|
8
8
|
|
9
|
-
WebMock.enable!
|
10
|
-
WebMock.disable_net_connect!(allow_localhost: true)
|
11
|
-
|
12
9
|
describe ".post" do
|
13
|
-
|
14
10
|
context "with uri-only supplied" do
|
15
11
|
before do
|
16
12
|
stub_request(:post, 'http://example.com/path').
|
17
|
-
with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
13
|
+
with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/x-www-form-urlencoded', 'User-Agent'=>'Ruby'}).
|
18
14
|
to_return(status: 200, body: '', headers: {})
|
19
15
|
end
|
20
16
|
|
@@ -54,26 +50,54 @@ describe ".post" do
|
|
54
50
|
context "with form data supplied" do
|
55
51
|
let(:uri){'http://example.com/path'}
|
56
52
|
let(:parsed_uri){URI.parse(uri)}
|
57
|
-
let(:
|
58
|
-
let(:
|
53
|
+
let(:args) do; {a: 1, b: 2}; end
|
54
|
+
let(:headers) do; {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/x-www-form-urlencoded', 'User-Agent'=>'Ruby'}; end
|
55
|
+
let(:encoded_form_data){args.x_www_form_urlencode}
|
59
56
|
let(:request_uri){parsed_uri.request_uri}
|
60
57
|
let(:request_object){Net::HTTP::Post.new(request_uri)}
|
61
58
|
|
62
59
|
before do
|
63
60
|
stub_request(:post, "http://example.com/path").
|
64
|
-
with(body:
|
61
|
+
with(body: encoded_form_data, headers: headers).
|
65
62
|
to_return(status: 200, body: '', headers: {})
|
66
63
|
end
|
67
64
|
|
68
65
|
it "sets the form data" do
|
69
66
|
allow(Net::HTTP::Post).to receive(:new).with(request_uri).and_return(request_object)
|
70
|
-
HTTP.post(uri,
|
67
|
+
HTTP.post(uri, args, headers)
|
71
68
|
expect(request_object.body).to eq(encoded_form_data)
|
72
69
|
end
|
73
70
|
|
74
71
|
it "creates a new Net::HTTP::Post object" do
|
75
72
|
expect(Net::HTTP::Post).to receive(:new).with(request_uri).and_return(request_object)
|
76
|
-
HTTP.post(uri,
|
73
|
+
HTTP.post(uri, args, headers)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context "with JSON data supplied" do
|
78
|
+
let(:uri){'http://example.com/path'}
|
79
|
+
let(:parsed_uri){URI.parse(uri)}
|
80
|
+
let(:args) do; {a: 1, b: 2}; end
|
81
|
+
let(:headers) do; {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/json', 'User-Agent'=>'Ruby'}; end
|
82
|
+
let(:json_data){JSON.dump(args)}
|
83
|
+
let(:request_uri){parsed_uri.request_uri}
|
84
|
+
let(:request_object){Net::HTTP::Post.new(request_uri)}
|
85
|
+
|
86
|
+
before do
|
87
|
+
stub_request(:post, "http://example.com/path").
|
88
|
+
with(body: json_data, headers: headers).
|
89
|
+
to_return(status: 200, body: '', headers: {})
|
90
|
+
end
|
91
|
+
|
92
|
+
it "sets the body" do
|
93
|
+
allow(Net::HTTP::Post).to receive(:new).with(request_uri).and_return(request_object)
|
94
|
+
HTTP.post(uri, args, headers)
|
95
|
+
expect(request_object.body).to eq(json_data)
|
96
|
+
end
|
97
|
+
|
98
|
+
it "creates a new Net::HTTP::Post object" do
|
99
|
+
expect(Net::HTTP::Post).to receive(:new).with(request_uri).and_return(request_object)
|
100
|
+
HTTP.post(uri, args, headers)
|
77
101
|
end
|
78
102
|
end
|
79
103
|
|
@@ -86,7 +110,7 @@ describe ".post" do
|
|
86
110
|
|
87
111
|
before do
|
88
112
|
stub_request(:post, 'http://example.com/path').
|
89
|
-
with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Rspec'}).
|
113
|
+
with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/x-www-form-urlencoded', 'User-Agent'=>'Rspec'}).
|
90
114
|
to_return(status: 200, body: '', headers: {})
|
91
115
|
end
|
92
116
|
|
@@ -105,7 +129,7 @@ describe ".post" do
|
|
105
129
|
|
106
130
|
before do
|
107
131
|
stub_request(:post, 'https://example.com:80/path').
|
108
|
-
with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
132
|
+
with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/x-www-form-urlencoded', 'User-Agent'=>'Ruby'}).
|
109
133
|
to_return(status: 200, body: '', headers: {})
|
110
134
|
end
|
111
135
|
|
@@ -121,7 +145,7 @@ describe ".post" do
|
|
121
145
|
|
122
146
|
before do
|
123
147
|
stub_request(:post, 'http://example.com/path').
|
124
|
-
with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
148
|
+
with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/x-www-form-urlencoded', 'User-Agent'=>'Ruby'}).
|
125
149
|
to_return(status: 200, body: '', headers: {})
|
126
150
|
end
|
127
151
|
|
@@ -145,12 +169,12 @@ describe ".post" do
|
|
145
169
|
before do
|
146
170
|
stub_request(:post, request_uri).
|
147
171
|
with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
148
|
-
to_return(status:
|
172
|
+
to_return(status: 301, body: '', headers: {'location' => redirect_uri})
|
149
173
|
end
|
150
174
|
|
151
175
|
it "does a redirect" do
|
152
176
|
expect(HTTP).to receive(:post).once.with(request_uri).and_call_original
|
153
|
-
expect(HTTP).to receive(:get).once.with(redirect_uri, {}, {}, {})
|
177
|
+
expect(HTTP).to receive(:get).once.with(redirect_uri, {}, {}, {use_ssl: false, verify_mode: 0})
|
154
178
|
HTTP.post(request_uri)
|
155
179
|
end
|
156
180
|
end
|
@@ -159,15 +183,54 @@ describe ".post" do
|
|
159
183
|
before do
|
160
184
|
stub_request(:post, request_uri).
|
161
185
|
with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
162
|
-
to_return(status:
|
186
|
+
to_return(status: 302, body: '', headers: {'location' => redirect_uri})
|
163
187
|
end
|
164
188
|
|
165
189
|
it "does a redirect" do
|
166
190
|
expect(HTTP).to receive(:post).with(request_uri).and_call_original
|
167
|
-
expect(HTTP).to receive(:get).with(redirect_uri, {}, {}, {})
|
191
|
+
expect(HTTP).to receive(:get).with(redirect_uri, {}, {}, {use_ssl: false, verify_mode: 0})
|
168
192
|
HTTP.post(request_uri)
|
169
193
|
end
|
170
194
|
end
|
171
195
|
end
|
172
196
|
|
197
|
+
context "with path only redirection" do
|
198
|
+
let(:request_uri){'http://example.com/path'}
|
199
|
+
let(:redirect_path){'/new_path'}
|
200
|
+
let(:redirect_uri){"http://example.com:80#{redirect_path}"}
|
201
|
+
|
202
|
+
before do
|
203
|
+
stub_request(:get, redirect_uri).
|
204
|
+
with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
205
|
+
to_return(status: 200, body: '', headers: {})
|
206
|
+
end
|
207
|
+
|
208
|
+
context "via 301" do
|
209
|
+
before do
|
210
|
+
stub_request(:post, request_uri).
|
211
|
+
with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
212
|
+
to_return(status: 301, body: '', headers: {'location' => redirect_path})
|
213
|
+
end
|
214
|
+
|
215
|
+
it "does a redirect" do
|
216
|
+
expect(HTTP).to receive(:get).once.with(redirect_uri, {}, {}, {use_ssl: false, verify_mode: 0})
|
217
|
+
expect(HTTP).to receive(:post).once.with(request_uri).and_call_original
|
218
|
+
HTTP.post(request_uri)
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
context "via 302" do
|
223
|
+
before do
|
224
|
+
stub_request(:post, request_uri).
|
225
|
+
with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/x-www-form-urlencoded', 'User-Agent'=>'Ruby'}).
|
226
|
+
to_return(status: 302, body: '', headers: {'location' => redirect_path})
|
227
|
+
end
|
228
|
+
|
229
|
+
it "does a redirect" do
|
230
|
+
expect(HTTP).to receive(:get).once.with(redirect_uri, {}, {}, {use_ssl: false, verify_mode: 0})
|
231
|
+
expect(HTTP).to receive(:post).once.with(request_uri).and_call_original
|
232
|
+
HTTP.post(request_uri)
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
173
236
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: http.rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- thoran
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-02-07 00:00:00.000000000 Z
|
12
11
|
dependencies: []
|
13
12
|
description: HTTP is the simplest HTTP mezzanine library for Ruby. Supply a URI, some
|
14
|
-
optional query arguments, some optional headers, and some
|
15
|
-
|
13
|
+
optional query arguments, some optional headers, and some Net::HTTP options,
|
14
|
+
and that's it!
|
16
15
|
email: code@thoran.com
|
17
16
|
executables: []
|
18
17
|
extensions: []
|
@@ -27,16 +26,15 @@ files:
|
|
27
26
|
- lib/Hash/x_www_form_urlencode.rb
|
28
27
|
- lib/Net/HTTP/Get/set_headers.rb
|
29
28
|
- lib/Net/HTTP/Post/set_headers.rb
|
29
|
+
- lib/Net/HTTP/set_options.rb
|
30
30
|
- lib/String/url_encode.rb
|
31
31
|
- lib/URI/Generic/use_sslQ.rb
|
32
|
-
- spec/HTTP.rb
|
33
32
|
- spec/HTTP/get_spec.rb
|
34
33
|
- spec/HTTP/post_spec.rb
|
35
34
|
- spec/spec_helper.rb
|
36
35
|
homepage: http://github.com/thoran/HTTP
|
37
36
|
licenses: []
|
38
37
|
metadata: {}
|
39
|
-
post_install_message:
|
40
38
|
rdoc_options: []
|
41
39
|
require_paths:
|
42
40
|
- lib
|
@@ -51,9 +49,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
51
49
|
- !ruby/object:Gem::Version
|
52
50
|
version: '0'
|
53
51
|
requirements: []
|
54
|
-
|
55
|
-
rubygems_version: 2.4.5
|
56
|
-
signing_key:
|
52
|
+
rubygems_version: 3.6.3
|
57
53
|
specification_version: 4
|
58
54
|
summary: HTTP made easy.
|
59
55
|
test_files: []
|
data/spec/HTTP.rb
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
# spec/HTTP.rb
|
2
|
-
|
3
|
-
spec_dir = File.expand_path(File.join(__FILE__, '..'))
|
4
|
-
$LOAD_PATH.unshift(spec_dir) unless $LOAD_PATH.include?(spec_dir)
|
5
|
-
|
6
|
-
require 'spec_helper'
|
7
|
-
|
8
|
-
require 'HTTP/get'
|
9
|
-
require 'HTTP/post'
|
10
|
-
|
11
|
-
require 'HTTP/get_spec'
|
12
|
-
require 'HTTP/post_spec'
|