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