lib/rmega/net.rb in rmega-0.2.2 vs lib/rmega/net.rb in rmega-0.2.4
- old
+ new
@@ -16,41 +16,47 @@
end
def http_get_content(url)
uri = URI(url)
req = ::Net::HTTP::Get.new(uri.request_uri)
- return send_http_request(uri, req).body
+ return net_http(uri).request(req).body
end
def http_post(url, data)
uri = URI(url)
req = ::Net::HTTP::Post.new(uri.request_uri)
req.body = data
logger.debug("REQ POST #{url} #{cut_string(data)}")
- response = send_http_request(uri, req)
+
+ # if you don't use Net::Http#start it will not keep the socket open even if you set
+ # the connection header BUT setting the connection header to 'keep-alive' its enough
+ # to fool MEGA servers and don't let them reset your connection!
+ req['Connection'] = 'keep-alive'
+
+ response = net_http(uri).request(req)
logger.debug("REP #{response.code} #{cut_string(response.body)}")
return response
end
private
- def send_http_request(uri, req)
+ def net_http(uri)
http = ::Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true if uri.scheme == 'https'
- apply_http_options(http)
- return http.request(req)
- end
- def apply_http_options(http)
+ # apply common http options
http.proxy_from_env = false if options.http_proxy_address
options.marshal_dump.each do |name, value|
setter_method = name.to_s.split('http_')[1]
http.__send__("#{setter_method}=", value) if setter_method and value
end
+
+ return http
end
def cut_string(string, max = 50)
+ return "<binary data, #{string.size} bytes>" if string.encoding == ::Encoding::ASCII_8BIT
string.size <= max ? string : string[0..max-1]+"..."
end
end
end
\ No newline at end of file