summaryrefslogtreecommitdiff
path: root/lib/net/hippie/client.rb
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-01-14 15:36:49 -0700
committermo khan <mo.khan@gmail.com>2020-01-14 15:36:49 -0700
commitcb36deaa0c8c3c60acc484d1e221f90f41896305 (patch)
treeb2534ad845df76dc3cd13e4d4ff001a50392204b /lib/net/hippie/client.rb
parentcd0813cad397b3d1f25e40b7c0ed86f8f85c8026 (diff)
Fix bugs in following redirects
Diffstat (limited to 'lib/net/hippie/client.rb')
-rw-r--r--lib/net/hippie/client.rb26
1 files changed, 11 insertions, 15 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)