diff options
| author | mo khan <mo.khan@gmail.com> | 2020-01-14 15:36:49 -0700 |
|---|---|---|
| committer | mo khan <mo.khan@gmail.com> | 2020-01-14 15:36:49 -0700 |
| commit | cb36deaa0c8c3c60acc484d1e221f90f41896305 (patch) | |
| tree | b2534ad845df76dc3cd13e4d4ff001a50392204b /lib | |
| parent | cd0813cad397b3d1f25e40b7c0ed86f8f85c8026 (diff) | |
Fix bugs in following redirects
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/net/hippie/client.rb | 26 | ||||
| -rw-r--r-- | lib/net/hippie/version.rb | 2 |
2 files changed, 12 insertions, 16 deletions
diff --git a/lib/net/hippie/client.rb b/lib/net/hippie/client.rb index 2c9b1d9..e81a674 100644 --- a/lib/net/hippie/client.rb +++ b/lib/net/hippie/client.rb @@ -26,11 +26,15 @@ module Net @follow_redirects = 0 end - def execute(uri, request) - response = follow(limit: follow_redirects) do - http_for(normalize_uri(uri)).request(request) + def execute(uri, request, limit: follow_redirects, &block) + response = http_for(uri).request(request) + if limit.positive? && response.is_a?(Net::HTTPRedirection) + location = response['location'] + request = request_for(Net::HTTP::Get, location) + execute(location, request, limit: limit - 1, &block) + else + block_given? ? yield(request, response) : response end - block_given? ? yield(request, response) : response end def get(uri, headers: {}, body: {}, &block) @@ -87,6 +91,7 @@ module Net end def http_for(uri) + uri = URI.parse(uri.to_s) http = Net::HTTP.new(uri.host, uri.port) http.read_timeout = read_timeout http.open_timeout = open_timeout if open_timeout @@ -99,15 +104,12 @@ module Net def request_for(type, uri, headers: {}, body: {}) final_headers = default_headers.merge(headers) - type.new(uri.to_s, final_headers).tap do |x| + uri = URI.parse(uri.to_s) + type.new(uri, final_headers).tap do |x| x.body = mapper.map_from(final_headers, body) unless body.empty? end end - def normalize_uri(uri) - uri.is_a?(URI) ? uri : URI.parse(uri) - end - def private_key(type = OpenSSL::PKey::RSA) passphrase ? type.new(key, passphrase) : type.new(key) end @@ -123,12 +125,6 @@ module Net logger.warn(message) end - def follow(limit: 0, &block) - response = yield - redirected = limit.positive? && response.is_a?(Net::HTTPRedirection) - redirected ? follow(limit: limit - 1, &block) : response - end - def run(uri, http_method, headers, body, &block) request = request_for(http_method, uri, headers: headers, body: body) execute(uri, request, &block) diff --git a/lib/net/hippie/version.rb b/lib/net/hippie/version.rb index 6d3f846..ffa6fdf 100644 --- a/lib/net/hippie/version.rb +++ b/lib/net/hippie/version.rb @@ -2,6 +2,6 @@ module Net module Hippie - VERSION = '0.3.0' + VERSION = '0.3.1' end end |
