nethttputils 0.3.2.1 → 0.3.2.2
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/lib/nethttputils.rb +25 -24
- data/nethttputils.gemspec +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ec41b21545731116bc0725bf44119fef0426b335
|
4
|
+
data.tar.gz: 2d1d9a34358628a0710f57ebdb49d2680ba17333
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d41944dc91ce2825d8b8095091f94792e4c1760f554ae5914320fa545063311a221222261aee19f85a5f34c97a16dec1176e034a5bff3753a061b0554d6b0a2
|
7
|
+
data.tar.gz: 884d389aebd0be39b04c9dd811276d5d3e3c8410c3e21e32d971ce99dc9fcb7935cb91a5f9cc85874cf0d4d9606797b3b2ea72a5caa34114cf2b0bf2a2ead125
|
data/lib/nethttputils.rb
CHANGED
@@ -95,14 +95,15 @@ module NetHTTPUtils
|
|
95
95
|
retry
|
96
96
|
end.tap do |http|
|
97
97
|
http.instance_variable_set :@uri, uri
|
98
|
-
http.instance_variable_set :@
|
99
|
-
|
100
|
-
|
101
|
-
patch_request: nil,
|
102
|
-
&block|
|
98
|
+
http.instance_variable_set :@max_start_http_retry_delay, max_start_http_retry_delay
|
99
|
+
end
|
100
|
+
end
|
103
101
|
|
102
|
+
private
|
103
|
+
def read http, mtd = :GET, type = :form, form: {}, header: {}, auth: nil, timeout: 30, max_read_retry_delay: 3600, patch_request: nil, &block
|
104
104
|
logger = NetHTTPUtils.logger
|
105
105
|
|
106
|
+
uri = http.instance_variable_get :@uri
|
106
107
|
logger.warn "Warning: query params included in `url` argument are discarded because `:form` isn't empty" if uri.query && !form.empty?
|
107
108
|
# we can't just merge because URI fails to parse such queries as "/?1"
|
108
109
|
|
@@ -142,15 +143,17 @@ module NetHTTPUtils
|
|
142
143
|
logger.info "> #{request.class} #{uri.host} #{request.path}"
|
143
144
|
next unless logger.debug?
|
144
145
|
logger.debug "content-length: #{request.content_length.to_i}, content-type: #{request.content_type}" unless %i{ HEAD GET }.include? mtd
|
146
|
+
logger.debug "query: #{uri.query.inspect}"
|
147
|
+
logger.debug "content-type: #{request.content_type.inspect}"
|
145
148
|
curl_form = case request.content_type
|
146
149
|
when "application/json" ; "-d #{JSON.dump form} "
|
147
150
|
when "multipart/form-data" ; form.map{ |k, v| "-F \"#{k}=#{v.respond_to?(:to_path) ? "@#{v.to_path}" : v}\" " }.join
|
148
151
|
when "application/x-www-form-urlencoded" ; "-d \"#{URI.encode_www_form form}\" "
|
149
152
|
else %i{ HEAD GET }.include?(mtd) ? "" : fail("unknown content-type '#{request.content_type}'")
|
150
153
|
end
|
151
|
-
logger.debug "curl -vsSL --compressed -o /dev/null #{
|
154
|
+
logger.debug "curl -vsSL --compressed -o /dev/null #{"-X HEAD " if request.is_a? Net::HTTP::Head}#{
|
152
155
|
request.each_header.map{ |k, v| "-H \"#{k}: #{v}\" " unless k == "host" }.join
|
153
|
-
}#{curl_form}'#{
|
156
|
+
}#{curl_form}'#{uri.scheme}://#{uri.host}#{uri.path}#{"?#{uri.query}" if uri.query && !uri.query.empty?}'"
|
154
157
|
logger.debug "> header: #{request.each_header.to_a}"
|
155
158
|
logger.debug "> body: #{request.body.inspect.tap{ |body| body[997..-1] = "..." if body.size > 500 }}"
|
156
159
|
# TODO this is buggy -- mixes lines from different files into one line
|
@@ -162,7 +165,6 @@ module NetHTTPUtils
|
|
162
165
|
logger.debug stack.join " -> "
|
163
166
|
end
|
164
167
|
end
|
165
|
-
http = instance_variable_get(:@http) || self
|
166
168
|
do_request = lambda do |request|
|
167
169
|
delay = 5
|
168
170
|
response = begin
|
@@ -204,7 +206,6 @@ module NetHTTPUtils
|
|
204
206
|
logger.debug "set-cookie: #{k}=#{v[/[^;]+/]}"
|
205
207
|
cookies.store k, v[/[^;]+/]
|
206
208
|
end
|
207
|
-
logger.debug "< header: #{response.to_hash}"
|
208
209
|
case response.code
|
209
210
|
when /\A30\d\z/
|
210
211
|
logger.info "redirect: #{response["location"]}"
|
@@ -215,9 +216,12 @@ module NetHTTPUtils
|
|
215
216
|
http.use_ssl? != (new_uri.scheme == "https")
|
216
217
|
logger.debug "changing host from '#{http.address}' to '#{new_host}'"
|
217
218
|
# http.finish
|
218
|
-
|
219
|
+
http = NetHTTPUtils.start_http new_uri, http.instance_variable_get(:@max_start_http_retry_delay), timeout
|
220
|
+
end
|
221
|
+
if request.method == "POST"
|
222
|
+
logger.info "POST redirects to GET (RFC)"
|
223
|
+
mtd = :GET
|
219
224
|
end
|
220
|
-
mtd = :GET
|
221
225
|
do_request.call prepare_request[new_uri]
|
222
226
|
when "404"
|
223
227
|
logger.error "404 at #{request.method} #{request.uri} with body: #{
|
@@ -251,9 +255,7 @@ module NetHTTPUtils
|
|
251
255
|
when /\A20/
|
252
256
|
response
|
253
257
|
else
|
254
|
-
logger.warn "code #{response.code} at #{request.method} #{request.uri}#{
|
255
|
-
" and so #{url}" if request.uri.to_s != url
|
256
|
-
} from #{
|
258
|
+
logger.warn "code #{response.code} at #{request.method} #{request.uri} from #{
|
257
259
|
[__FILE__, caller.map{ |i| i[/(?<=:)\d+/] }].join ?:
|
258
260
|
}"
|
259
261
|
logger.debug "< body: #{
|
@@ -268,10 +270,8 @@ module NetHTTPUtils
|
|
268
270
|
cookies.each{ |k, v| response.add_field "Set-Cookie", "#{k}=#{v};" }
|
269
271
|
logger.debug "< header: #{response.to_hash}"
|
270
272
|
(response.body || "").tap{ |r| r.instance_variable_set :@last_response, response }
|
271
|
-
|
272
|
-
end
|
273
|
-
end
|
274
273
|
end
|
274
|
+
public
|
275
275
|
|
276
276
|
def request_data http, mtd = :GET, type = :form, form: {}, header: {}, auth: nil, timeout: 30,
|
277
277
|
max_start_http_retry_delay: 3600,
|
@@ -297,7 +297,7 @@ module NetHTTPUtils
|
|
297
297
|
require "set"
|
298
298
|
@@_405 ||= Set.new
|
299
299
|
if mtd == :GET && !@@_405.include?(http.address)
|
300
|
-
body = request_data http, :HEAD, auth: auth,
|
300
|
+
body = request_data http, :HEAD, header: header, auth: auth,
|
301
301
|
max_start_http_retry_delay: max_start_http_retry_delay,
|
302
302
|
max_read_retry_delay: max_read_retry_delay
|
303
303
|
if "405" == body.instance_variable_get(:@last_response).code
|
@@ -306,7 +306,7 @@ module NetHTTPUtils
|
|
306
306
|
check_code.call body
|
307
307
|
end
|
308
308
|
end
|
309
|
-
body =
|
309
|
+
body = read http, mtd, type, form: form, header: header, auth: auth, timeout: timeout,
|
310
310
|
max_read_retry_delay: max_read_retry_delay,
|
311
311
|
patch_request: patch_request, &block
|
312
312
|
check_code.call body
|
@@ -332,6 +332,7 @@ if $0 == __FILE__
|
|
332
332
|
NetHTTPUtils.logger.level = Logger::DEBUG
|
333
333
|
require "pp"
|
334
334
|
|
335
|
+
NetHTTPUtils.request_data("https://goo.gl/ySqUb5") # this will fail if domain redirects are broken
|
335
336
|
|
336
337
|
require "webrick"
|
337
338
|
require "json"
|
@@ -385,11 +386,11 @@ if $0 == __FILE__
|
|
385
386
|
raise unless e.code == code
|
386
387
|
end
|
387
388
|
end
|
388
|
-
fail unless NetHTTPUtils.start_http("http://httpstat.us/400")
|
389
|
-
fail unless NetHTTPUtils.start_http("http://httpstat.us/404")
|
390
|
-
fail unless NetHTTPUtils.start_http("http://httpstat.us/500")
|
391
|
-
fail unless NetHTTPUtils.start_http("http://httpstat.us/502")
|
392
|
-
fail unless NetHTTPUtils.start_http("http://httpstat.us/503")
|
389
|
+
fail unless NetHTTPUtils.method(:read).call(NetHTTPUtils.start_http("http://httpstat.us/400")) == "400 Bad Request"
|
390
|
+
fail unless NetHTTPUtils.method(:read).call(NetHTTPUtils.start_http("http://httpstat.us/404")) == "404 Not Found"
|
391
|
+
fail unless NetHTTPUtils.method(:read).call(NetHTTPUtils.start_http("http://httpstat.us/500")) == "500 Internal Server Error"
|
392
|
+
fail unless NetHTTPUtils.method(:read).call(NetHTTPUtils.start_http("http://httpstat.us/502")) == "502 Bad Gateway"
|
393
|
+
fail unless NetHTTPUtils.method(:read).call(NetHTTPUtils.start_http("http://httpstat.us/503")) == "503 Service Unavailable"
|
393
394
|
[
|
394
395
|
["https://imgur.com/a/cccccc"],
|
395
396
|
["https://imgur.com/mM4Dh7Z"],
|
data/nethttputils.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = "nethttputils"
|
3
|
-
spec.version = "0.3.2.
|
3
|
+
spec.version = "0.3.2.2"
|
4
4
|
spec.summary = "this tool is like a pet that I adopted young and now I depend on, sorry"
|
5
5
|
spec.description = <<-EOF
|
6
6
|
Back in 2015 I was a guy automating things at my job and two scripts had a common need --
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nethttputils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.2.
|
4
|
+
version: 0.3.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Maslov aka Nakilon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-01-
|
11
|
+
date: 2019-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |2
|
14
14
|
Back in 2015 I was a guy automating things at my job and two scripts had a common need --
|
@@ -51,7 +51,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
51
51
|
version: '0'
|
52
52
|
requirements: []
|
53
53
|
rubyforge_project:
|
54
|
-
rubygems_version: 2.
|
54
|
+
rubygems_version: 2.5.2
|
55
55
|
signing_key:
|
56
56
|
specification_version: 4
|
57
57
|
summary: this tool is like a pet that I adopted young and now I depend on, sorry
|